0

説明が下手で申し訳ありませんが、より適切な言い方が思いつきませんでしたが、徹底的に説明しようと思います。

この方法でテーブルをセットアップしたとしましょう:

入力テーブル

Itm Type
A   Apple
B   Orange
C   Apple
B   Grape
D   Peaches
B   Apple
C   Grapes
E   Apple
A   Apple

目標は、各アイテム (A、B、C、D、および E) と、そのアイテムに割り当てられた各タイプの総数を示すテーブルを作成することです。

目標出力テーブル

Itm    Apple  Orange  Grape  Peaches    
A       2       0       0       0   
B       1       1       1       0
C       1       0       1       0
D       0       0       0       1
E       1       0       0       0

私が今使用しているクエリは、すべてのアイテムのすべてのタイプを合計し、その値を各行に配置しているように見えるテーブルを表示します。

前もって感謝します!

4

3 に答える 3

1

クエリ:

select Itm, Apple, Orange, Grape, Peaches
from items
pivot(count(Type) for Type in (Apple, Orange, Grape, Peaches)) p

サンプルスキーマとデータ。StackOverflowに質問を投稿するときは、常にこれらを提供する必要があります。

create table items(Itm char(1), Type varchar(10));
insert items select
'A',   'Apple' union all select
'B',   'Orange' union all select
'C',   'Apple' union all select
'B',   'Grape' union all select
'D',   'Peaches' union all select
'B',   'Apple' union all select
'C',   'Grapes' union all select
'E',   'Apple' union all select
'A',   'Apple';

結果:

| ITM | APPLE | ORANGE | GRAPE | PEACHES |
------------------------------------------
|   A |     2 |      0 |     0 |       0 |
|   B |     1 |      1 |     1 |       0 |
|   C |     1 |      0 |     0 |       0 |
|   D |     0 |      0 |     0 |       1 |
|   E |     1 |      0 |     0 |       0 |

SQLフィドル

于 2012-10-26T05:27:41.243 に答える
1
SELECT 
    Item, 
    ISNULL([Apple], 0) 'Apple', 
    ISNULL([Orange], 0) 'Orange', 
    ISNULL([Grapes], 0) 'Grapes', 
    ISNULL([Peaches], 0) 'Peaches'
FROM
(
    SELECT 
        Item, Type, count(*) 'ItemTypeCount'
    FROM 
        ItemTypes
    GROUP BY Item, Type
) AS T
PIVOT
(
    SUM(ItemTypeCount) FOR Type IN ([Apple], [Orange], [Grapes], [Peaches])
) As PivotResults
于 2012-10-26T05:00:30.837 に答える
0

これを実行してみてください

SELECT 
         ITEM 
         , SUM(APPLE) AS APPLE 
         , SUM(Grapes) AS Grapes
         ,SUM(Orange) AS Orange 
         , SUM(Peaches) AS Peaches
FROM(SELECT 
        ITEM 
        ,CASE WHEN TYPE = 'APPLE' THEN  COUNT(*) ELSE 0 END AS APPLE
        ,CASE WHEN TYPE = 'Grapes' THEN  COUNT(*) ELSE 0 END AS  Grapes
        ,CASE WHEN TYPE = 'Orange' THEN  COUNT(*) ELSE 0 END AS Orange
        ,CASE WHEN TYPE = 'Peaches' THEN  COUNT(*) ELSE 0 END AS Peaches 
    FROM ITEM
    GROUP BY ITEM , TYPE 
    ) AS A GROUP BY ITEM
于 2012-10-26T05:23:58.713 に答える