0

次の値のテーブルがあります。

Date                     TCOUNT      COUNT
02/06/2013 00:00        3500        35
02/12/2013 00:00        4000        23
02/21/2013 00:00        1000        54
02/27/2013 00:00        5000        12

動的列はどこDateにピボットする必要がありますか。

以下の結果を得るには、上記のテーブルをピボットする必要があります

02/06/2013 00:00    02/12/2013 00:00    02/21/2013 00:00    02/27/2013 00:00
35                  23                  54                  12
3500                4000                1000                5000

助けてください。

ありがとう。

4

1 に答える 1

2

あなたの前の質問がSQLサーバーでタグ付けされたという事実に基づいて、私はあなたがSQLサーバー構文を必要としていると推測しています。

結果を得るには、UNPIVOTPIVOT関数の両方を使用する必要があります。unpivotはと列を取得して行に変換し、次にが取得しTCountて列に変換します。CountPIVOTdates

事前に値がわかっている場合は、クエリをハードコーディングできます。

select *
from
(
  select date, value, col
  from yourtable
  unpivot
  (
    value
    for col in (tcount, count)
  ) unpiv
) src
pivot
(
  max(value)
  for date in ([2013-02-06], [2013-02-12], 
               [2013-02-21], [2013-02-27])
) piv;

SQL FiddlewithDemoを参照してください

ただし、日付の数が不明な場合は、動的SQLが必要になります。

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(varchar(10), Date, 120)) 
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT col, ' + @cols + ' from 
             (
                select convert(varchar(10), Date, 120) date, 
                  value, col
                from yourtable
                unpivot
                (
                  value
                  for col in (tcount, count)
                ) unpiv
            ) src
            pivot 
            (
                max(value)
                for date in (' + @cols + ')
            ) p '

execute(@query)

SQL FiddlewithDemoを参照してください

両方の結果は次のとおりです。

|    COL | 2013-02-06 | 2013-02-12 | 2013-02-21 | 2013-02-27 |
--------------------------------------------------------------
|  COUNT |         35 |         23 |         54 |         12 |
| TCOUNT |       3500 |       4000 |       1000 |       5000 |
于 2013-02-12T21:52:17.687 に答える