【问题标题】:Combing SQL Query Result set to sum rows with matching text values组合 SQL 查询结果集以对具有匹配文本值的行求和
【发布时间】:2020-06-15 07:31:24
【问题描述】:
SELECT DISTINCT 
    V_NAME AS VendorName, 
    P_QOH AS Quantity,
    CASE 
        WHEN  P_DESCRIPT  LIKE  '%blade%'  THEN 'Blade'
        WHEN  P_DESCRIPT LIKE  '%screw%'  THEN 'Screw Driver'
        WHEN  P_DESCRIPT  LIKE  '%hammer%'  THEN 'Hammer'
        ELSE 'OTHERS' 
    END AS ProductCategory
FROM Product, Vendor
WHERE 
    ( 
        P_DESCRIPT  LIKE  '%blade%'
        OR P_DESCRIPT LIKE  '%screw%'
        OR P_DESCRIPT  LIKE  '%hammer%' 
    )
    AND Product.V_CODE = Vendor.V_CODE;

这个查询给了我结果:

Gomez Bros.|32|Blade
Gomez Bros.|18|Blade
ORDVA, Inc.|8|Blade
ORDVA, Inc.|6|Blade
Bryson, Inc.|23|Hammer
Bryson, Inc.|172|Screw Driver
D&E Supply|237|Screw Driver
Gomez Bros.|237|Screw Driver
Gomez Bros.|23|Hammer
Bryson, Inc.|32|Blade
Bryson, Inc.|237|Screw Driver

我尝试了很多方法都无济于事。我想要做的是组合结果集中具有相同工具名称(例如“锤子、螺丝刀、刀片”)的行,并为列出的每个公司组合各个行的值。

因此,例如,我希望前两行读取为

Gomez Bros.|50|Blade

将两行与值 32 和 18 组合在一起,它们都具有“Blade”类型

感谢任何帮助!我对 SQL 很陌生。在这里挣扎。谢谢大家。

【问题讨论】:

    标签: sql sqlite group-by distinct


    【解决方案1】:

    你似乎想要聚合:

    SELECT 
        v.V_NAME AS VendorName, 
        SUM(p.tP_QOH) AS Quantity,
        CASE 
            WHEN  p.P_DESCRIPT  LIKE  '%blade%'  THEN 'Blade'
            WHEN  p.P_DESCRIPT LIKE  '%screw%'  THEN 'Screw Driver'
            WHEN  p.P_DESCRIPT  LIKE  '%hammer%'  THEN 'Hammer'
            ELSE 'OTHERS' 
        END AS ProductCategory
    FROM Product p
    INNER JOIN Vendor v ON p.V_CODE = v.V_CODE
    WHERE 
           p.P_DESCRIPT LIKE '%blade%'
        OR p.P_DESCRIPT LIKE '%screw%'
        OR p.P_DESCRIPT LIKE '%hammer%'
    GROUP BY v.V_CODE, VendorName, ProductCategory
    

    注意事项:

    • 总是使用正确的现代连接语法(使用 ON 关键字)而不是老式连接(在 from 子句中使用逗号)

    • 最好在每列前面加上它所属的表(我做了一些假设,您可能需要查看)

    • 表别名使查询的读写时间更短

    【讨论】:

    • 这太棒了,非常感谢您的帮助。它让我几乎在那里......现在我试图弄清楚如何从供应商插入中删除重复项,这使得产品计数(P_QOH)远远高于它应该是......```插入P值('X6SW-23116','2.5-in. wd.螺丝, 15','24-FEB-2016',237,100, 8.45,0.00,21225);插入 P 值('W6SW-23116','2.5-in. wd. screw, 15','24-APR-2016',237,100, 8.45,0.00,21225); ``` 例如,上面的 4 行 Product 表应该只计算一次,因为它们都是同一个项目
    • 本质上,该查询从 Product 表中获取来自同一供应商且具有相同 P_DESCRIPT 的所有行(例如:'2.5-in. wd. screw, 15')并将它们组合在一起。我需要它只采用唯一的 P_DESCRIPT 或省略重复的 V_CODE(供应商代码)来匹配 P_DESCRIPTS .. 再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-01-04
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多