使用多个子查询作为实例的字段的SQL条件
我正在使用procsql,但这个问题应该与所有SQL变体相关。我试图用两个子查询中的值填充一个字段使用多个子查询作为实例的字段的SQL条件,sql,sas,proc-sql,Sql,Sas,Proc Sql,我正在使用procsql,但这个问题应该与所有SQL变体相关。我试图用两个子查询中的值填充一个字段BruceDPOtest,如果第一个查询结果为空--CASE WHEN BruceDPO=INPUT(“,8”)--它用另一个子查询的BruceDPO值填充该空白: THEN ( SELECT SUM(PART_QTY) FROM RSCCParts LEFT JOIN DPO.DPO_PART_ORD_HST AS Total ON RSCCParts.PartID = STRIP(Total.P
BruceDPOtest
,如果第一个查询结果为空--CASE WHEN BruceDPO=INPUT(“,8”)
--它用另一个子查询的BruceDPO值填充该空白:
THEN (
SELECT SUM(PART_QTY) FROM RSCCParts LEFT JOIN DPO.DPO_PART_ORD_HST AS Total
ON RSCCParts.PartID = STRIP(Total.PART_NO_ID)
WHERE PUT(PROC_DT, YY.) LIKE '%2016%' GROUP BY PART_NO_ID) ELSE BruceDPO END
例如,第一个查询给出以下结果
Part DPO
1234 100
1235
运行引用可填充第二行的数据的第二个子查询以获取:
Part DPO
1234 100
1235 999
以下是完整的代码:
PROC SQL;
CREATE VIEW DPOMergeView AS(SELECT *,
CASE
WHEN BruceDPO = INPUT("", 8.) THEN (
SELECT SUM(PART_QTY) FROM RSCCParts LEFT JOIN DPO.DPO_PART_ORD_HST AS Total
ON RSCCParts.PartID = STRIP(Total.PART_NO_ID)
WHERE PUT(PROC_DT, YY.) LIKE '%2016%' GROUP BY PART_NO_ID)
ELSE BruceDPO
END
AS BruceDPOtest
FROM
RSCCParts
LEFT JOIN (SELECT RSCCParts.PartID AS BrucePartID, BruceDPO, Year
FROM RSCCParts
LEFT JOIN
(SELECT PART_NO_ID AS PartNumber, SUM(PART_QTY) AS BruceDPO, STRIP(YR) AS Year
FROM
DPO.DPO_PART_HST_MAIN
WHERE YR = '2016'
GROUP BY PartNumber, Year) AS FQuery
ON
RSCCParts.PartID = STRIP(FQuery.PartNumber)) AS B
ON RSCCParts.PartID = B.BrucePartID);
QUIT;
当我运行这个查询时,它卡在数据步骤上,30分钟后,我停止了查询。我这样做对吗?如果有更好的方法,请让我知道 通常我会避免在SQL中使用相关子查询,因为它只会让人觉得您是在一条记录一条记录地处理数据,而不是通过组合集合。但是如果你用了什么语法,比如
case when (x) then (sub query result) else variable_name end
然后子查询只需要返回一个值。你的问题
SELECT SUM(PART_QTY)
FROM RSCCParts LEFT JOIN DPO.DPO_PART_ORD_HST AS Total
ON RSCCParts.PartID = STRIP(Total.PART_NO_ID)
WHERE PUT(PROC_DT, YY.) LIKE '%2016%'
GROUP BY PART_NO_ID
由于您使用的是GROUPBY子句,因此它将返回多个观察结果
子查询不应该看起来更像吗
SELECT SUM(Total.PART_QTY)
FROM DPO.DPO_PART_ORD_HST AS Total
WHERE RSCCParts.PartID = STRIP(Total.PART_NO_ID)
AND PUT(PROC_DT, YY.) LIKE '%2016%'
您的查询有多个对RSCCPARTS表的引用,因此您可能需要为每个表引入一个别名,以便澄清要使用哪个别名来获取PARTID以匹配PART\u NO\u ID。如果没有您正在组合的数据样本,我们真的无法对此进行测试。您是否可以发布
RSCCParts
、DPO.DPO\u PART\u ORD\u HST
和DPO.DPO\u PART\u HST\u MAIN
表的示例数据?这是一个通用示例。我的代码只是为了说明这样一个程序是否可行。您可以使用自己的数据创建类似的程序。不幸的是,我不允许发布这些表的数据。不需要发布真实数据。只要做一些记录来证明这个问题。或者使用SASHELP.CLASS或SASHELP.CARS等表创建一个示例,每个人都可以在SAS中使用这些表。谢谢Tom。你的建议恰到好处。我是按照您的建议来做的,特别是关于主查询的别名和将其用作相关子查询的建议。