2014-01-08 37 views
0

中的行插入到临时表中我正在构建包含不同类别,项目和成本的临时表#表。基于已经在表

例如:

Category Item Cost 
-------- ---- ---- 
Office  Desk 100.00 
Office  Chair 75.00 
Office  PC  800.00 
Home  Desk 0.00 

在我收到的临时表对我的处理,有与类别,项目各行的时间和成本以及摘要行包含每个总和具有非零总类别:

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

如果您担心perf,请发布执行计划。需要多长时间,需要多少时间? – usr

+0

请说明。你想从#table中插入类别到它自己? – Zane

回答

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 
0

怎么样在2步这样做 -

1 - 将原始数据直了 - 没有汇总信息 2 - 将更多的数据 - 按类别选择数据分组,使用成本SUM聚合,和项目&类型字段摘要的硬编码NULL。