-1

ここに私のデータベース構造があります:

ここに画像の説明を入力

次のようなデータを表示したい:

ここに画像の説明を入力

どうすればできますか?ピボットを使用する必要がありますか?

4

2 に答える 2

2

これに使えますPIVOT。PIVOT でこれを行うには 2 つの方法があります。変換する列をコーディングする静的ピボットか、実行時に列を決定する動的ピボットのいずれかです。

静的ピボット:

select *
from
(
  select dt, username, product,
    'product' 
      + cast(row_number() 
               over(partition by username order by product) as varchar(10)) productNum
  from yourtable
) x
pivot
(
  min(product)
  for productNum in ([product1], [product2], [product3])
) p
order by dt

デモで SQL Fiddle を参照してください

動的ピボット:

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

select @cols = 
    STUFF((SELECT distinct ',' + Quotename('product' 
              + cast(row_number() 
               over(partition by username order by product) as varchar(10)))
             from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query 
    = 'SELECT dt, username,' + @cols + ' from 
       (
        select dt, username, product,
           ''product''
            + cast(row_number() 
               over(partition by username order by product) as varchar(10)) productNum
        from yourtable
       ) x
       pivot 
       (
          min(product)
          for productNum in (' + @cols + ')
       ) p 
        order by dt'

execute(@query)

デモで SQL Fiddle を参照してください

于 2012-09-05T15:02:50.157 に答える
0

はい、ピボットを使用する必要があります。

ただし、商品の数がわからない場合は、動的なピボットを使用する必要があります。このようなものです。

于 2012-09-05T14:28:43.243 に答える