2016-11-30 117 views
1

我有一個包含兩列TransDateString和TransDate的數據集。 TransdateString簡直Transdate的nvarchar的版本,所以數據是這樣的:我的t-sql查詢的部分結果不合法

TransDate | TransDateString 
2011-1-4 | 1-2011 
2004-6-5 | 6-2004 
2010-10-14| 10-2010 
2012-7-21 | 7-2012 
2010-10-11| 10-2010 
2012-7-5 | 7-2012 

我試圖做的是TransDate得到TransDateString到一個變量依次是:

SET @cols = STUFF((

     SELECT ',' + QUOTENAME(A.TransDateString) FROM 
     (
      Select c.TransDateString, 
       Row_Number() Over (Partition By c.TransDateString Order By c.TransDate asc) RowNum 
       FROM #dataSet c 
     ) A 
     Where RowNum = 1 



     FOR XML PATH(''), TYPE 
     ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'') 

這工程,但他們不是爲了。在運行時,我得到的東西像@cols=[[1-2011],[10-2010],[6-2004],[7-2012]]

+1

SQL Server 2106有一個[STRING_AGG](https://msdn.microsoft.com/en-us/library/mt790580.aspx)方法。你正在使用哪種SQL Server版本? –

+2

SQL Server 2008 R2不再受支持。升級時間。 BTW [2016 SP1](https://sqlperformance.com/2016/11/sql-server-2016/big-deal-sp1)將內存表,壓縮,列存儲索引,分區引入Express Edition和LocalDb –

回答

3

至少與輸入數據,下面的代碼爲您提供:

[6-2004],[10-2010],[1-2011],[7-2012]

DECLARE @DataSource TABLE 
(
    [TransDate] VARCHAR(12) 
    ,[TransDateString] VARCHAR(12) 
); 

INSERT INTO @DataSource ([TransDate], [TransDateString]) 
VALUES ('2011-1-4', '1-2011') 
     ,('2004-6-5', '6-2004') 
     ,('2010-10-14', '10-2010') 
     ,('2010-10-14', '10-2010') 
     ,('2012-7-21', '7-2012') 
     ,('2012-7-21', '7-2012'); 


SELECT 
STUFF((

     SELECT ',' + QUOTENAME(A.TransDateString) FROM 
     (
      Select c.TransDateString 
       ,Row_Number() Over (PARTITION BY C.TransDateString Order By c.TransDate asc) RowNum 
       ,Row_Number() Over (Order By c.TransDate asc) RowId 
       FROM @DataSource c 
     ) A 
     WHERE RowNUm = 1 
     ORDER BY RowId 



     FOR XML PATH(''), TYPE 
     ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'') 
2

的SQL Server 2016帶來了可用於就像STRING_AGG功能其他集合函數:

SELECT STRING_AGG(TransDateString,',') 
FROM #dataSet c 
ORDER BY TransDate 

SQL Server 2008 R2不再受支持。值得一提的是,SQL Server 2016 SP1提供曾經是企業的SKU的一部分,甚至是快速和的LocalDB功能:壓縮,分割,在內存中的表,快照,掩蔽,審計等

性能許可的好處提升一個非常有趣的想法。