我正在处理UNION ALL并收到此错误以启动:
Msg 205,Level 16,State 1,Line 1 使用UNION,INTERSECT或EXCEPT运算符组合的所有查询在目标列表中必须具有相同数量的表达式。
这是我认为发生错误的地方:
With CTE AS(
SELECT Pull_Date, Well_Name, Part1 Part, Part1_PN PartPN, Part1_SN PartSN FROM testtest
UNION ALL
SELECT Pull_Date, Well_Name, Part2, Part2_PN, Part2_SN, Part3, Part3_PN, Part3_SN from testtest
)
我相信我需要在第一个SELECT语句中插入更多字段。我已经用下面的工作纠正了它,但是当我这样做时,我没有收到Part3,Part4中我需要的一些信息,我会怀疑我需要输入的其他15个部分。当我查找AGH(不在part1或part2但在part3中)时,我只收到NULL信息。因此AGH,AGH_PN,AGH_SN在我期待某些信息存在时都是NULL。
With CTE AS(
SELECT Pull_Date, Well_Name, Part1 Part, Part1_PN PartPN, Part1_SN PartSN, NULL t1, NULL t2, NULL t3, NULL t4, NULL t5, NULL t6 FROM testtest
UNION ALL
SELECT Pull_Date, Well_Name, Part2, Part2_PN, Part2_SN, Part3, Part3_PN, Part3_SN, Part4, Part4_PN, Part4_SN from testtest
)
Select Pull_Date, Well_Name,
MIN(CASE WHEN Part='BODH' THEN 'BODH' ELSE NULL END) [BODH],
MIN(CASE WHEN Part='BODH' THEN PartPN Else NULL END) BODH_PN,
MIN(CASE WHEN Part='BODH' THEN PartSN ELSE NULL END) BODH_SN,
MIN(CASE WHEN Part='Cable' THEN 'Cable' ELSE NULL END) [Cable],
MIN(CASE WHEN Part= 'Cable' THEN PartPN Else NULL END) Cable_PN,
MIN(CASE WHEN Part= 'Cable' THEN PartSN ELSE NULL END) Cable_SN,
MIN(CASE WHEN Part= 'Pump' THEN 'Pump' ELSE Null END) [Pump],
MIN(CASE WHEN Part= 'Pump' THEN PartPN ELSE NULL END) Pump_PN,
MIN(CASE WHEN Part= 'Pump' THEN PartSN ELSE NULL END) Pump_SN,
MIN(CASE WHEN Part= 'MLE' THEN 'MLE' ELSE NULL END) [MLE],
MIN(CASE WHEN Part= 'MLE' THEN PartPN ELSE NULL END) MLE_PN,
MIN(CASE WHEN Part= 'MLE' THEN PartSN ELSE NULL END) MLE_SN,
MIN(CASE WHEN Part= 'AGH' THEN 'AGH' ELSE NULL END) [AGH],
MIN(CASE WHEN Part= 'AGH' THEN PartPN ELSE NULL END) AGH_PN,
MIN(CASE WHEN Part= 'AGH' THEN PartSN ELSE NULL END) AGH_SN
FROM CTE
GROUP BY Pull_Date, Well_Name
任何帮助将不胜感激。
答案 0 :(得分:1)
从我看到的,你为什么要在第二个查询中添加Part3?我想你想要更像这样的东西:
With CTE AS
(
SELECT Pull_Date, Well_Name, Part1 AS Part, Part1_PN AS PartPN, Part1_SN AS PartSN FROM testtest
UNION ALL
SELECT Pull_Date, Well_Name, Part2, Part2_PN, Part2_SN FROM testtest
UNION ALL
SELECT Pull_Date, Well_Name, Part3, Part3_PN, Part3_SN FROM testtest
)
这个设置可能比你的问题揭示的更多吗?你的桌子是什么样的?
您说您的问题是AGH始终返回空值并填充在“Part3”字段中。如果是这种情况,您需要以与第1部分和第2部分相同的方式为“Part3”字段提取数据。
当您从这样的多个字段聚合数据时,您需要确保每个实例都是自己的记录。像Part2和Part1一样打破Part3 ...允许你摆脱额外的字段(NULL t1,NULL t2等...)并将你的相似数据字段保存在同一个上下文中。
答案 1 :(得分:0)
你是对的,错误出现在你突出显示的查询中。错误消息告诉您从UNION ALL任一侧的查询返回的字段数应该相同,否则它不知道如何将它们组合到单个结果集中
答案 2 :(得分:0)
var Array2 = Array1;
$.each(Array2,function(index,value) {
value.year = "AllYear";
});//returns what you excepted