Sql-Server
SQL Server 查詢需要幫助:訪問不在 GROUP BY 子句中的列
我有一個表,其列如下:
CREATE TABLE Tests ( TestDate date, EntityID int)
使用儲存過程,我想找到在同一“學年”中發生的成對測試的“學年”,其中“學年”定義為固定月數後測試日期的年份部分(@ AcYearOff,值通常等於 7) 被減去。我使用以下程式碼執行此操作:
CREATE TABLE #tmpTable ( vYear char(4), vDate char(8)) INSERT # tmpTable (vYear, vDate) SELECT DATEPART(yyyy, dateadd(MONTH, @AcYearOff, TestDate)), format(TestDate, 'MMM yyyy') FROM Tests WHERE Tests.EntityID = @ EntityID SELECT vYear FROM # tmpTable GROUP BY vYear HAVING count(vYear) = 2 ORDER BY vYear
上面的程式碼完全符合預期。我現在想向該查詢添加一個字元串,該字元串顯示進行兩次測試的實際月份和年份。為此,我將列 vDate 添加到臨時表中,但我無法弄清楚如何組合兩個 vDate 值並將它們作為字元串返回。
為了清楚起見,下面是 Tests 表中的一些範例數據:
2018-08-12, 21 2018-09-04, 22 2019-04-17, 21 2019-08-03, 21
並且儲存過程應該返回:
“2018 年”、“2018 年 8 月和 2019 年 4 月”
我期待看到您的建議。謝謝你。
在 SQL Server 2017 或 Azure SQL 數據庫中:
SELECT vYear, STRING_AGG(vDate, ' and ') FROM #tmpTable GROUP BY vYear HAVING count(vYear) = 2 ORDER BY vYear;
在 SQL Server 2016 或更低版本中:
SELECT vYear, STUFF((SELECT ' and ' + vDate FROM #tmpTable WHERE vYear = t.vYear ORDER BY vDate FOR XML PATH, TYPE).value(N'.[1]',N'nvarchar(max)'),1,5,'') FROM #tmpTable AS t GROUP BY vYear HAVING count(vYear) = 2 ORDER BY vYear;