2016-11-30 4 views
1

私はTransDateStringとTransDateの2つの列を持つデータセットを持っています。私がやろうとしている何私の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,'') 

このデータは次のようになりますので、TransdateStringは、単にTRANSDATEのnvarchar型バージョンです動作しますが、順不同です。実行時に、私は@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も表現し、LocalDBし、エンタープライズのSKUの一部に使用する機能を提供していることは注目に値しますアップグレードは非常に興味深い考えをします。

関連する問題