私はProc SQLを使用していますが、この質問はすべてのSQLバリアントに関連する必要があります。私は別のサブクエリのBruceDPO値を空白にすることをいっぱい--it blanks-- CASE WHEN BruceDPO = INPUT("", 8.)
の最初のクエリ結果であれば2つのサブクエリからの値を持つフィールドBruceDPOtest
を移入しようとしています:たとえば複数のサブクエリを使用するフィールドのSQLの条件付き条件
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
第二列を移入することができます参照データを取得するために実行されていることを第二副問合せ:私はこのクエリを実行すると、
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;
:ここ
Part DPO
1234 100
1235 999
は完全なコードですそれはデータステップで立ち往生し、30分後に私はクエリを停止しました。私はこれを正しくしていますか?これを行うより良い方法がある場合は、私に知らせてください!
実際には、結合するデータのサンプルがないとこれをテストすることはできません。 'RSCCParts'、' DPO.DPO_PART_ORD_HST'、 'DPO.DPO_PART_HST_MAIN'テーブルのサンプルデータを投稿できますか? – Tom
これは一般的な例です。私のコードは、そのようなプログラムが可能かどうかを示すためのものです。独自のデータを使用して同様のプログラムを作成できます。残念ながら、私はそれらのテーブルのデータを投稿することはできません。 –
REALデータを送信する必要はありません。問題を示すレコードをいくつか作成してください。また、SASHELP.CLASSやSASHELP.CARSのようなテーブルを使って、誰もが既にSASで利用可能な例を作成することもできます。 – Tom