我正在构建一个包含不同类别,项目和成本的临时表#Table。
例如:
Category Item Cost
-------- ---- ----
Office Desk 100.00
Office Chair 75.00
Office PC 800.00
Home Desk 0.00
在我收到临时表进行处理时,有个别行包含Category,Item和Cost以及Summary行,其中包含每个类别总和非零的总和:
Category Item Cost Type
-------- ---- ---- -----
Office Desk 100.00 Cost
Office Chair 75.00 Cost
Office PC 800.00 Cost
Office null 975.00 Summary
Home Desk 0.00 Cost
我现在也要为$ 0.00成本行添加摘要行,但是我很难弄清楚如何这样做。
INSERT INTO #Table
SELECT X.Category, null, 0.00, 'Summary'
FROM #Table X
...[Get Category data that does not have a Summary row]
我曾想过
WHERE NOT EXISTS ( SELECT * FROM #Table Y WHERE Y.Category = X.Category AND Type = 'Summary')
GROUP BY X.Category
但我担心性能,因为此表中可能有很多行。
答案 0 :(得分:0)
您应该对性能进行基准测试,但我发现连接速度更快。此外,如果您的数据集非常大,则在将数据加载到临时表后添加索引可以显着加快后续表查询的速度。
INSERT INTO #Table
SELECT X.Category, null, 0.00, 'Summary'
FROM #Table X
LEFT JOIN #Table Y ON Y.Category = X.Category AND Y.Type = 'Summary'
WHERE Y.Category IS NULL
答案 1 :(得分:0)
如何分两步完成 -
1 - 直接插入原始数据 - 没有摘要信息 2 - 插入更多数据 - 按类别选择数据分组,使用SUM聚合成本,并对项目&amp ;;硬编码NULL类型字段的摘要。