Sql server 具有计数和总和的SQL Server数据透视表
我正在尝试让一个SQL Server Pivot表工作,该表允许我对许多列进行计数,然后求和(总共6列)。透视表的目的是汇总任意数量生产站点的在线问卷调查结果。有6个问题可以有3个结果值-目标、行动和失败。我想做的是计算每个问题的目标、行动和失败的数量,然后对每个问题进行总结。例如,生产站点A可能有2个目标、2个操作和2个失败 我的理解是,SQLServerPivot表可以提供这些信息,然后这些信息可以显示在ASP.NETReportViewer中。下面是我的代码,但它不起作用,需要一些专家帮助:Sql server 具有计数和总和的SQL Server数据透视表,sql-server,tsql,pivot,unpivot,Sql Server,Tsql,Pivot,Unpivot,我正在尝试让一个SQL Server Pivot表工作,该表允许我对许多列进行计数,然后求和(总共6列)。透视表的目的是汇总任意数量生产站点的在线问卷调查结果。有6个问题可以有3个结果值-目标、行动和失败。我想做的是计算每个问题的目标、行动和失败的数量,然后对每个问题进行总结。例如,生产站点A可能有2个目标、2个操作和2个失败 我的理解是,SQLServerPivot表可以提供这些信息,然后这些信息可以显示在ASP.NETReportViewer中。下面是我的代码,但它不起作用,需要一些专家帮助
SELECT PRODUCTION_Site,
[Target],
[Action],
[Fail]
FROM
(SELECT Production_Site,
SUM(Coding),
SUM(Measurable),
SUM(Appearance),
SUM(Aroma),
SUM(Flavour),
SUM(Texture)
FROM t_Pqe_Grocery
GROUP BY Production_Site) AS T
PIVOT
(
COUNT(Coding) FOR Grocery_Packaging_And_Coding IN ([Target],[Action],[Fail])
COUNT(Measurable) FOR Grocery_Measurable IN ([Target],[Action],[Fail])
COUNT(Appearance) FOR Grocery_Appearance IN ([Target],[Action],[Fail])
COUNT(Aroma) FOR Grocery_Aroma IN ([Target],[Action],[Fail])
COUNT(Flavour) FOR Grocery_Flavour IN ([Target],[Action],[Fail])
COUNT(Texture) FOR Grocery_Texture IN ([Target],[Action],[Fail])) AS P
有没有办法解决这个问题,或者透视表不是解决方案
桌子是
Production_Site,
Grocery_Packaging_And_Coding,
Grocery_Measurable,
Grocery_Appearance,
Grocery_Aroma,
Grocery_Flavour,
Grocery_Texture
表中的数据如下所示:
Site A, Target, Action, Fail, Target, Target, Target
Site B, Target, Action, Fail, Target, Target, Target
Site C, Target, Target, Target, Target, Target, Target
Site A, Target, Target, Target, Target, Target, Target
我想要的结果是
Production_Site | Target | Action | Fail
Site A 10 1 1
Site B 4 1 1
Site C 6 0 0
执行此查询的更简单方法是应用
UNPIVOT
和PIVOT
函数:
select *
from
(
select Production_Site, value
from t_Pqe_Grocery
unpivot
(
value
for col in (Grocery_Packaging_And_Coding, Grocery_Measurable,
Grocery_Appearance, Grocery_Aroma,
Grocery_Flavour, Grocery_Texture)
) unp
) src
pivot
(
count(value)
for value in ([Target], [Action], [Fail])
) piv
看
UNPIVOT
获取列列表并将其转换为多行,从而更易于计数:
select Production_Site, value
from t_Pqe_Grocery
unpivot
(
value
for col in (Grocery_Packaging_And_Coding, Grocery_Measurable,
Grocery_Appearance, Grocery_Aroma,
Grocery_Flavour, Grocery_Texture)
) unp
取消Pivot结果:
| PRODUCTION_SITE | VALUE |
----------------------------
| Site A | Target |
| Site A | Action |
| Site A | Fail |
| Site A | Target |
| Site A | Target |
| Site A | Target |
| Site B | Target |
| Site B | Action |
| Site B | Fail |
| Site B | Target |
| Site B | Target |
| Site B | Target |
| Site C | Target |
| Site C | Target |
| Site C | Target |
| Site C | Target |
| Site C | Target |
| Site C | Target |
| Site A | Target |
| Site A | Target |
| Site A | Target |
| Site A | Target |
| Site A | Target |
| Site A | Target |
然后将PIVOT
应用于此将获得每个生产站点所需的计数。添加枢轴后,结果为:
| PRODUCTION_SITE | TARGET | ACTION | FAIL |
--------------------------------------------
| Site A | 10 | 1 | 1 |
| Site B | 4 | 1 | 1 |
| Site C | 6 | 0 | 0 |
您能提供表格结构、一些示例数据以及数据透视所需的结果吗?我将此保留在主要数据中-检查原始问题以了解详细信息哪些不起作用?你能设置一个SQL Fiddle示例吗?刚才添加了一些表结构、数据和我试图实现的结果示例谢谢,但最后一个问题是,如果用户希望查看一段时间内的3个站点而不是所有站点,是否可以在透视中添加where子句?@Andy5是,您仍然可以应用WHERE
子句来限制任何结果-类似于此---您甚至可以将WHERE
子句应用于内部UNPIVOT
查询