2016-05-02 55 views
2

代碼:T-SQL的串聯變量#

DECLARE @GroupByCnt INT = 3; 

CREATE TABLE #Temp (ID VARCHAR(15)) 

INSERT INTO #Temp 
SELECT '123' 
UNION ALL SELECT '123' 
UNION ALL SELECT '234' 
UNION ALL SELECT '345' 
UNION ALL SELECT '456' 
UNION ALL SELECT '456' 
UNION ALL SELECT '456' 
UNION ALL SELECT '567' 
UNION ALL SELECT '678' 
UNION ALL SELECT '789' 
UNION ALL SELECT '890' 
UNION ALL SELECT '901' 
UNION ALL SELECT '901' 

SELECT DISTINCT STUFF((
      SELECT ',' + ID 
      FROM #Temp T1 
      WHERE T1.ID = T2.ID 
      FOR XML PATH('') 
      ), 1, 1, '') ID 
FROM #Temp T2 

DROP TABLE #Temp 

電流輸出:

ID 
123,123 
234 
345 
456,456,456 
567 
678 
789 
890 
901,901 

所需的輸出:

ID 
123,234,345 
456,567,678 
789,890,901 

目標:

我想連接一組唯一記錄(逗號分隔)。

所以在上面的例子中,我想連接3個獨特的記錄在一次(而不是完全)。有9個獨特的記錄;因爲我希望他們按3分組,所以我最終會在這些輸出記錄的每個輸出記錄(按ID排序)中最終記錄3條記錄,其中有3條記錄。

回答

3

看起來像演示文稿的問題,它應該在應用程序層完成。


你可以使用 DENSE_RANK()和整數除法創建組:

WITH cte AS 
(
    SELECT DISTINCT ID, (DENSE_RANK() OVER(ORDER BY ID) - 1)/3 AS grp 
    FROM #Temp 
) 
SELECT DISTINCT STUFF((SELECT ',' + ID 
         FROM cte T1 
         WHERE T1.grp = T2.grp 
         ORDER BY ID 
         FOR XML PATH('') 
         ), 1, 1, '') ID 
FROM cte T2; 

LiveDemo

輸出:

╔═════════════╗ 
║  ID  ║ 
╠═════════════╣ 
║ 123,234,345 ║ 
║ 456,567,678 ║ 
║ 789,890,901 ║ 
╚═════════════╝ 
+1

「你可以使用DENSE_RANK()和整數分工創建組:「偉大的技巧!這按預期工作。謝謝。 – 007