SQL - 字段有两个记录值,只想显示基于另一个字段内总计的值之一,然后显示两个值的总计

SQL - Field has two values for a record, want to only show one of the values based on total within another field, then show totals for both values

所以我正在尝试创建前十名列表,但有些公司有 2 个关联的 BUSTYPES,我希望结果对值求和,同时仅包括与较大值关联的 BUSTYPE

示例查询

SELECT TOP 10 ID, COMPANY, BUSTYPE, sum(value) as VALUES
FROM TABLE
GROUP BY ID, COMPANY, BUSTYPE
ORDER BY VALUES desc

相关输出table1:

ID   COMPANY   BUSTYPE  VALUES
123  orange     Large    1820

相关输出table2:

ID   COMPANY   BUSTYPE  VALUES
123  orange     Small    294

IDEAL TABLE 最终结果 (2114 = 1820 + 294) 较大的值与 Large Bustype 相关联,因此显示

ID   COMPANY   BUSTYPE  VALUES
123  orange     Large    2114

还附上一张图片以进一步可视化

我的最终目标是创建一个 table 我可以在我的主要 table 中加入默认的 BUSTYPE,所以我不必担心公司有 2 个 BUSTYPE

或者想办法对我的整个数据集执行此操作!

您可以使用 window 函数:

SELECT TOP 10 ID, COMPANY,
       MAX(CASE WHEN seqnum = 1 THEN BUSTYPE END) as BUSTYPE, 
       SUM(value) as VALUES
FROM (SELECT T.*,
             ROW_NUMBER() OVER (PARTITION BY ID, COMPANY ORDER BY VALUE DESC) AS seqnum
      FROM TABLE T
     ) T
GROUP BY ID, COMPANY
ORDER BY VALUES desc;

您也可以使用 FIRST_VALUE(),这样您就不需要条件聚合:

SELECT TOP 10 ID, COMPANY, FIRST_BUSTYPE, 
       SUM(value) as VALUES
FROM (SELECT T.*,
             FIRST_VALUE(BUSTYPE) OVER (PARTITION BY ID, COMPANY ORDER BY VALUE DESC) AS FIRST_BUSTYPE
      FROM TABLE T
     ) T
GROUP BY ID, COMPANY, FIRST_BUSTYPE
ORDER BY VALUES desc