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
所以我正在尝试创建前十名列表,但有些公司有 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