SQL Server 计数查询
Posted
技术标签:
【中文标题】SQL Server 计数查询【英文标题】:SQL Server Count Query 【发布时间】:2013-01-03 07:39:11 【问题描述】:我有如下三张表:
Article
No Storage_code Type_code
--- ------------ ---------
1 10 00 00 S
2 10 10 00 P
1 10 10 10 S
3 11 00 00 C
1 10 00 00 C
2 11 10 10 P
Storage
Main_Code Division_Code Safe_Code Position_Code Main_Name
--------- ------------- --------- ------------- -------------
10 00 00 10 00 00 Div1
10 10 00 10 10 00 Div1_Saf1
10 10 10 10 10 10 Div1_Saf1_Pos1
10 10 11 10 10 11 Div1_Saf1_Pos2
10 10 12 10 10 12 Div1_Saf1_Pos3
10 11 00 10 11 00 Div1_Saf2
10 11 10 10 11 10 Div1_Saf2_Pos1
10 11 11 10 11 11 Div1_Saf2_Pos2
10 11 12 10 11 12 Div1_Saf2_Pos3
11 00 00 11 00 00 Div2
11 10 00 11 10 00 Div2_Saf1
11 10 10 11 10 10 Div2_Saf1_Pos1
11 10 11 11 10 11 Div2_Saf1_Pos2
11 10 12 11 10 12 Div2_Saf1_Pos3
11 11 00 11 11 00 Div2_Saf2
11 11 10 11 11 10 Div2_Saf2_Pos1
11 11 11 11 11 11 Div2_Saf2_Pos2
11 11 12 11 11 12 Div2_Saf2_Pos3
Types
Code Name
-------- --------
C Cards
P Plates
S Stickers
我想要一个选择的结果如下:
Main_Code Division_Code Safe_Code Position_Code Main_Name Cards Plates Stickers Total
----------------------------------------------------------------------------------------
10 00 00 10 00 00 Div1 1 1 2 4
10 10 00 10 10 00 Div1_Saf1 0 1 1 2
10 10 10 10 10 10 Div1_Saf1_Pos1 0 0 1 1
11 00 00 11 00 00 Div2 1 1 0 2
11 10 00 11 10 00 Div2_Saf1 0 1 0 1
11 10 10 11 10 10 Div2_Saf1_Pos1 0 1 0 1
谁能尽快帮助我。
【问题讨论】:
我已开始编辑您的问题,以便我们查看表格。但我不会做所有的清理工作。发布代码或应具有固定布局的项目时,请使用
代码示例按钮。并使用预览区域,以便您可以查看您的问题实际上会是什么样子。原来的问题不可读。
您还需要说明Cards
、Plates
和Stickers
列是如何计算的。
你想要的是一个透视查询。您可以使用 case 语句和聚合或使用 PIVOT 子句手动执行此操作。这个网站上有很多很多的例子,你可以搜索。
【参考方案1】:
您正在寻找将行转为列,试试这个:
SELECT
s.[Main_Code],
s.Division_Code,
s.Safe_Code,
s.Position_Code,
s.Main_Name,
SUM(CASE WHEN t.Name ='Cards' THEN 1 ELSE 0 END) AS Cards,
SUM(CASE WHEN t.Name ='Plates' THEN 1 ELSE 0 END) AS Plates,
SUM(CASE WHEN t.Name ='Stickers' THEN 1 ELSE 0 END) AS Stickers,
COUNT(t.Name) AS Total
FROM Storage s
INNER JOIN Article a ON a.Storage_code = s.[MainCode]
INNER JOIN Types t ON a.Type_code = t.Code
GROUP BY s.Main_Code,
s.Division_Code,
s.Safe_Code,
s.Position_Code,
s.Main_Name;
【讨论】:
以上是关于SQL Server 计数查询的主要内容,如果未能解决你的问题,请参考以下文章