0

非常に長いクエリがあるとします。

select T.TipoVers As TypeVers,
       sum(T.ImpTot) As N, 
       C.DataCalendario As Date, 
from ( SELECT ... )
group by C.DataCalendario, T.TipoVers 

これにより、次のような出力が生成されます。

 TypeVers     N      Date
================================
   Type1      1    2012-09-10
   Type2      47   2012-09-10 
   Type3      5    2012-09-11

私はほぼ完了しましたが、最終的なタッチは次のようになります。同じdateニーズを持つ行は、連結(文字列値の場合)および合計(数値の場合-現在、これが機能する唯一の部分です)である必要があります:

   TypeVers       N       Date
====================================
  Type1,Type2     48    2012-09-10
     Type3        5     2012-09-11

ここでXML pathについて読みました。そのソリューションの問題は、大量のコードです (非常に長いクエリを生成する STUFF 句内でクエリを書き直す必要があります)。私が持っている代替手段は何ですか?

4

2 に答える 2

0

長いコードを 2 回記述する必要はありません。内部の xml path('') クエリが共通テーブル式として機能する結果セットを取得する非常に長いコードを記述します。

--Creates a common table expression that we can reference more than once in the select.
WITH myLongQueryCTE AS
(
SELECT
ROW_NUMBER() over (order by something) AS SOME_UNIQUE_COLUMN --Put you unique column here or create a new one with row_number
,TipoVers 
,ImpTot
,DataCalendario 
...
GROUP BY DataCalendario
)

SELECT
STUFF((SELECT ', ' + TipoVers FROM myLongQueryCTE AS a WHERE a.SOME_UNIQUE_COLUMN = b.SOME_UNIQUE_COLUMN FOR XML PATH('')),1,1,'') as TypeVers
,SUM(ImpTot) AS N
,DataCalendario AS Date
FROM myLongQueryCTE AS b
于 2013-05-31T11:28:05.477 に答える