2

アイテムテーブル:

|   Item    |   Qnty    |   ProdSched   |
|    a      |    1      |       1       |
|    b      |    2      |       1       |
|    c      |    3      |       1       |
|    a      |    4      |       2       |
|    b      |    5      |       2       |
|    c      |    6      |       2       |

SQL を使用してこのように出力する方法はありますSELECTか?

|   Item    |   ProdSched(1)(Qnty)  |   ProdSched(2)(Qnty)  |
|    a      |           1           |       4               |
|    b      |           2           |       5               |
|    c      |           3           |       6               |
4

3 に答える 3

11

これに使えますPIVOT。変換する値の数がわかっている場合は、静的ピボットを介して値をハードコーディングできます。

select item, [1] as ProdSched_1, [2] as ProdSched_2
from 
(
  select item, qty, prodsched
  from yourtable
) x
pivot
(
  max(qty)
  for prodsched in ([1], [2])
) p

SQL Fiddle with Demoを参照してください

列数が不明な場合は、動的ピボットを使用できます。

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

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

set @query = 'SELECT item,' + @cols + ' from 
             (
              select item, qty, prodsched
              from yourtable
            ) x
            pivot 
            (
                max(qty)
                for prodsched in (' + @cols + ')
            ) p '

execute(@query)

SQL Fiddle with Demoを参照してください

于 2012-09-20T01:49:23.107 に答える
4
SELECT Item, 
  [ProdSched(1)(Qnty)] = MAX(CASE WHEN ProdSched = 1 THEN Qnty END),
  [ProdSched(2)(Qnty)] = MAX(CASE WHEN ProdSched = 2 THEN Qnty END)
FROM dbo.tablename
GROUP BY Item
ORDER BY Item;
于 2012-09-20T01:45:53.660 に答える
0

これを2段階で叩きましょう。まず、これはあなたが望んでいた正確な形式ではありませんが、次のようにして、要求したデータを取得できます。

Select item, ProdSched, max(qty)
  from Item1
 group by item,ProdSched

ここで、目的の形式でデータを取得する方法の 1 つは PIVOT テーブルです。次のように、SQL Server でピボット テーブルを作成できます。

Select item, [1] as ProdSched1, [2] as ProdSched2
from ( Select Item, Qty, ProdSched
         from item1 ) x
Pivot ( Max(qty) for ProdSched in ([1],[2]))  y
于 2012-09-20T01:52:21.097 に答える