1

次のテーブルとデータがあります。

CREATE TABLE SourceTbl ([Code] varchar(3), [Total] decimal, [Date] datetime );

INSERT INTO SourceTbl ([Code], [Total], [Date]) 
VALUES ('AA', 100, '2012-12-01'), ('AA', 200, '2013-02-01'), ('BB', 50, '2012-01-01');

単純な選択が返されます

Code | Total | Date
'AA' | 100   | 2012-12-01
'AA' | 200   | 2013-02-01
'BB' | 50    | 2012-01-01

しかし、私が必要とするのは次のとおりです

Code | Total | Date       | Total | Date
'AA  | 200   | 2013-02-01 | 100   | 2012-12-01
'BB  | 50    | 2012-01-01 | null  | null

PIVOT 演算子を使用してこれを実行しようとしましたが、成功しませんでした ( SQL Server Pivot multiple columns based on one columnの質問に基づいて)。

その例を使用すると、null 値を持つ 2 つの行しか得られません。

合計/日付列は 13 回繰り返すことができ、日付 DESC で並べ替える必要があります。

SQL フィドル: http://sqlfiddle.com/#!3/f37a1/2

どんな助けでも大歓迎です!ありがとう!

4

2 に答える 2

2

2 つの列だけが必要な場合:

with cte as (
    select *, row_number() over(partition by Code order by Date) as rn
    from SourceTbl
)
select
    code,
    max(case when rn = 1 then Total end) as Total1,
    max(case when rn = 1 then Date end) as Date1,
    max(case when rn = 2 then Total end) as Total2,
    max(case when rn = 2 then Date end) as Date2
from cte
group by code

=> sql フィドルのデモ

動的解:

declare @stmt nvarchar(max)

;with cte as (
     select distinct
         cast(row_number() over(partition by Code order by Date) as nvarchar(max)) as rn
     from SourceTbl
)
select @stmt = isnull(@stmt + ', ', '') + 
    'max(case when rn = ' + rn + ' then Total end) as Total' + rn + ',' +
    'max(case when rn = ' + rn + ' then Date end) as Date' + rn 
from cte
order by rn

select @stmt = '
    with cte as (
        select *, row_number() over(partition by Code order by Date) as rn
        from SourceTbl
    )
    select
        code, ' + @stmt + ' from cte group by code'

exec sp_executesql
    @stmt = @stmt

=> sql フィドルのデモ

于 2013-09-06T18:40:03.297 に答える
0

結果セットに列を動的に作成しようとしていますか?

合計 300 で日付が 03/01/2013 の 'AA' の 3 番目のレコードがある場合、このようなものを表示したいということですか?

Code | Total | Date       | Total | Date      | Total | Date
 AA  | 200   | 2013-02-01 | 100   | 2012-12-01| 300   | 03-01-13
 BB  | 50    | 2012-01-01 | null  | null      | null  | null        
于 2013-09-06T18:21:53.527 に答える