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 
    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 回答
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 回答
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 回答