【问题标题】:Create a table pivot-like output with SQL/Access使用 SQL/Access 创建类似于表的数据透视表输出
【发布时间】:2015-07-08 10:04:01
【问题描述】:

我有一个由 2 列组成的表格:

Tested_Object | Result

     A        |  OK
     A        |  NOT OK
     A        |  NOT OK
     B        |  OK

我需要有如下输出:

Tested_Object | SUM    | OK    | NOT_OK

     A        |  3     |1      | 2 
     B        |  1     |1      | 0 (or empty)

我尝试使用:

SELECT
t1.Tested_Object,
Count(t1.Result) AS SUM,
Count(t2.Result) AS OK,
Count(t3.Result) AS NOT_OK
FROM
(t1 LEFT JOIN (t1 AS t2) ON t1.Tested_Object=t2.Tested_Object) 
LEFT JOIN (t1 AS t3) WHERE t1.Tested_Object=t3.Tested_Object 

GROUP BY t1.Tested_Object

现在如果我说:

WHERE (t2.Result="OK" AND t3.Result="NOT_OK")

WHERE (t2.Result="OK" OR t3.Result="NOT_OK")

t1 LEFT JOIN (t1 AS t2 WHERE t2.Result="OK") ON t1.Tested_Object=t2.Tested_Object

我为每列或错误得到相同的计数。

我设法获得了不同的列号,仅将所有 OK 保存在一个表中,而将 NOT OKs 手动保存在另一个表中。但我需要一个从输入到输出表完全自动进行计算的查询。

如果不清楚,我是 SQL 新手 :) 提前致谢

【问题讨论】:

    标签: mysql sql ms-access


    【解决方案1】:

    MySQL 解决方案

    您可以使用CASE ... WHEN ... THEN 来区分OK 值和NOT OK 值。

    SELECT Tested_Object
         , COUNT( Tested_Object ) AS `SUM`
         , SUM( CASE WHEN Result = 'OK' THEN 1 ELSE 0 END ) AS `OK`
         , SUM( CASE WHEN Result = 'NOT OK' THEN 1 ELSE 0 END ) AS `NOT_OK`
      FROM t1
     GROUP BY Tested_Object
    

    MS Access 解决方案

    您可以使用IIF Function

    SELECT Tested_Object
         , COUNT( Tested_Object ) AS SUM
         , SUM( IIF( Result = 'OK', 1, 0 ) ) AS OK
         , SUM( IIF( Result = 'NOT OK', 1, 0 ) ) AS NOT_OK
      FROM t1
     GROUP BY Tested_Object
    

    【讨论】:

      【解决方案2】:
      SELECT Tested_Object
       , count(*) SUM
       ,  Count(CASE
                 WHEN Result = 'OK' THEN 1
               END) OK
       ,Count(CASE
                 WHEN Result = 'NOT_OK' THEN 1
               END) NOTOK
      FROM my_table 
      GROUP 
      BY Tested_Object;
      

      在小提琴http://sqlfiddle.com/#!6/22986/1中寻找解决方案

      【讨论】:

      • MSAccess 在查询表达式“count(*) SUM”中返回语法错误(缺少运算符)
      • @LuciaBelardinelli:它适用于 SQL 而不是 MS Access
      • 请看主题中有访问词,也有关键..谢谢
      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 2012-07-20
      • 2020-08-18
      • 2016-04-10
      相关资源
      最近更新 更多