Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 具有计数和总和的SQL Server数据透视表_Sql Server_Tsql_Pivot_Unpivot - Fatal编程技术网

Sql server 具有计数和总和的SQL Server数据透视表

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中。下面是我的代码,但它不起作用,需要一些专家帮助

我正在尝试让一个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
查询