SQL插入/UNION ALL仅返回最后一张表数据问题排查
问题原因分析
1. 临时表#tmpSources的类别数据错误
你的代码中插入#tmpSources时,Category字段被硬编码为固定字符串'category':
INSERT INTO #tmpSources SELECT 'category', a, b, c, d, e, f, code, xtype, SUM(num) as num ...
这导致#tmpSources中所有数据的Category值都是'category',根本不存在'A'或'B'类别。后续两个INSERT语句里的WHERE Category = 'A'和Category = 'B'条件,第一个查询完全匹配不到数据,只有当第二个INSERT的条件实际能命中(比如你实际代码中这里是笔误,应该是从源表取Category值),才会有数据插入到#tmpFinalSource。
2. 非法字段[All]导致的筛选错误
你的所有查询块中都用到了WHERE [All] = 1条件,但#tmpSources的表结构里根本没有All这个字段。这要么会直接触发语法错误,要么是你笔误写错了字段名(比如应该是源表中的某个字段,却没同步到#tmpSources里)。如果第一个INSERT的[All] =1条件实际无法匹配任何数据,自然不会插入A类数据,最终只有第二个INSERT的B类数据能被写入。
关于UNION ALL仅返回B类结果的原因
本质和上面一致:UNION ALL合并的两个查询块中,第一个查询(A类)因为Category或[All]条件不匹配,返回空结果集,只有第二个查询(B类)能返回数据,所以最终结果只显示B类内容。
修复建议
- 修正
#tmpSources的插入语句,从源表(比如#tempRawSource)获取实际的Category值,而不是硬编码:INSERT INTO #tmpSources SELECT t.Category, a, b, c, d, e, f, code, xtype, SUM(num) as num FROM #tempRawSource t JOIN dbo.TAB_SourceTable vbls ON vbls.ID = t.code GROUP BY t.Category, a, b, c, d, e, f, t.code, vbls.xtype; - 检查
[All] =1条件中的字段名,确保#tmpSources表中存在该字段,或者修正为正确的字段(比如如果是源表的字段,需要在插入#tmpSources时一并加入表结构和查询中)。
内容的提问来源于stack exchange,提问作者Elaine K
相关产品推荐
相关产品推荐

