sql - 使用 sql 从行中计算字符串值?

标签 sql sql-server database

我有一个 SQL 查询,我在其中使用 INNER JOIN 但我必须计算字符串值 ERROROK 及其 total 来自 d.sd_figure 列。

这是我的 SQL 查询

    SELECT 
        count(d.sd_figure = 'ERROR') AS error,
        count(d.sd_figure = 'OK') AS OK count,
        count(*) AS total,
        m.contr_num, bu.buyer_name, 
        m.S_remarks, cr.contr_name, br.brand_name,
        m.S_date, c.colour_name, s.size_name,
        mn.manu_name
    FROM 
        Scanning_M m
    INNER JOIN 
        colour c ON m.color_id = c.colour_id
    INNER JOIN  
        Buyer bu ON m.buyer_id = bu.Byer_ID
    INNER JOIN 
        Scanning_D d ON m.S_id = d.S_id
    INNER JOIN 
        Brand br ON m.Brand_id = br.Brand_id
    INNER JOIN 
        Contract cr ON m.Contr_num = cr.Contr_id
    INNER JOIN 
        Size s ON m.Size_id = s.Size_id
    INNER JOIN 
        Manufacturer mn ON m.Manu_id = mn.manu_id
    WHERE 
        m.S_date BETWEEN '2016-01-13' AND '2016-01-13'

我还想添加 'error' 、 'OK' 和 'Total' 的计数,错误也在这一行

SELECT  
    count(d.sd_figure = 'ERROR') AS error, 
    count(d.sd_figure = 'OK') as OK count,
    count(*) as total ,

我尝试了很多解决方案,但由于未找到等而返回了组

d.sd_figure 所需的示例数据

   S_id sd_res  sd_figure   sd_datetime           sd_id
   4    456456  ERROR      2016-01-09 03:11:07.000  1
   4    456456  ERROR       2016-01-09 03:11:07.000 2
   4    456456  ERROR       2016-01-09 03:11:07.000 3

   6    123     ERROR      2016-01-09 10:54:47.000  22
   6    123     ERROR      2016-01-09 10:54:47.000  23
   6    123     ERROR      2016-01-09 10:54:47.000  24
   6    123     ERROR      2016-01-09 10:54:48.000  25
   6    123     ERROR      2016-01-09 10:54:48.000  26

最佳答案

未经测试,但应该是这样的:

SELECT sum(CASE WHEN d.sd_figure = 'ERROR' THEN 1 ELSE 0 END) AS error
    ,sum(CASE WHEN d.sd_figure = 'OK' THEN 1 ELSE 0 END) AS [OK count]
    ,count(*) AS total
    ,m.contr_num
    ,bu.buyer_name
    ,m.S_remarks
    ,cr.contr_name
    ,br.brand_name
    ,m.S_date
    ,c.colour_name
    ,s.size_name
    ,mn.manu_name
FROM Scanning_M m
INNER JOIN colour c ON m.color_id = c.colour_id
INNER JOIN Buyer bu ON m.buyer_id = bu.Byer_ID
INNER JOIN Scanning_D d ON m.S_id = d.S_id
INNER JOIN Brand br ON m.Brand_id = br.Brand_id
INNER JOIN Contract cr ON m.Contr_num = cr.Contr_id
INNER JOIN Size s ON m.Size_id = s.Size_id
INNER JOIN Manufacturer mn ON m.Manu_id = mn.manu_id
WHERE m.S_date BETWEEN '2016-01-13' AND '2016-01-13'
GROUP BY m.contr_num
    ,bu.buyer_name
    ,m.S_remarks
    ,cr.contr_name
    ,br.brand_name
    ,m.S_date
    ,c.colour_name
    ,s.size_name
    ,mn.manu_name

关于sql - 使用 sql 从行中计算字符串值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34763110/

相关文章:

mysql - 在单个 MySQL 语句中计算多个百分比

mysql - SQL 数据库 : use one table with 3, 5M 条目或条目较少的许多表?

database - 无法从access数据库中读取数据

database - 多少应用程序 "smarts"应该驻留在数据库中?

php - 一种存储开放时间以确定某个地方现在是否开放的方法

sql - SQL Server 事务中的 SELECT 语句放置哪种类型的锁

php - 如何防止 PHP 中的 SQL 注入(inject)?

sql - 如何在 MSSQL 中使用聚合函数更新表中的两列?

sql-server - 如何从 SQL Server 获取证书公钥?

sql - 如何使用 case 语句将多个值放入一列中?