Proc SQL을 사용하고 있지만이 질문은 모든 SQL 변형과 관련이 있습니다.여러 하위 쿼리를 경우로 사용하는 필드에 대한 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
는, 첫 번째 쿼리가 있습니다 : blanks-- CASE WHEN BruceDPO = INPUT("", 8.)
--it에서 첫 번째 쿼리의 결과가 다른 하위 쿼리의 BruceDPO 값이 빈 채우는 경우에 나는 두 개의 하위 쿼리에서 값 필드 BruceDPOtest
을 채우기 위해 노력하고 있어요 다음 결과;
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;
을, DATA Step에서 멈추고 30 분 후에 쿼리를 중단했습니다. 이 일을 제대로하고 있습니까? 이 작업을 수행하는 더 좋은 방법이 있다면 알려주십시오!
결합하려는 데이터 샘플이 없으면 테스트 할 수 없습니다. 'RSCCParts','DPO.DPO_PART_ORD_HST' 및'DPO.DPO_PART_HST_MAIN' 테이블에 대한 예제 데이터를 게시 할 수 있습니까? – Tom
이것은 일반적인 경우의 예입니다. 내 코드는 그러한 프로그램이 가능한지 보여줄뿐입니다. 자신의 데이터를 사용하여 유사한 프로그램을 만들 수 있습니다. 불행히도 그 테이블에 대한 데이터를 게시 할 수 없습니다. –
REAL 데이터를 게시 할 필요가 없습니다. 문제를 보여주는 몇 가지 기록을 작성하십시오. SASHELP.CLASS 또는 SASHELP.CARS와 같은 테이블을 사용하여 예제를 만들면 모든 사람이 이미 SAS에서 사용할 수 있습니다. – Tom