3
이 선택 항목에서 지난 달 및 현재 월의 값을 가져 와서 6 개의 열을 표시하려고합니다. OLDVALUE 자체 ~ OLDVALUE X 28,8 % ~ OLDVALUE X 8 % ~ CURVALUE 자체 ~ CURVALUE X 28,8 % ~ CURVALUE X 8 %변수에 SQL 하위 쿼리를 할당하고 동일한 컨텍스트에서 사용하는 방법
하지만 아래에 나와있는 것과 같이 동일한 하위 쿼리로 이전 달에 3 번 가져 가야합니다. 이렇게하면 코드가 매우 커지고 성능이 떨어집니다 (자세한 정보를 원합니다).
"임시"변수를 할당하여이 부속 쿼리의 결과를 동일한 컨텍스트에서 다시 사용하도록 유지하는 방법이 있습니까? 루프 구조의 변수처럼 행별로 값을 변경 하시겠습니까?
감사합니다.
/* == PARAMETERS == */
DECLARE @ANO INT = 2011
DECLARE @MES INT = 7
/* ===================================== SELECT ===================================== */
SELECT FUNC.CHAPA, FUNC.CODSECAO,
(SELECT VALPROVFER FROM PFHSTPROV (NOLOCK)
WHERE CHAPA = FUNC.CHAPA
AND ANO = CASE WHEN (PROV.MES-1 = 0) THEN PROV.ANO-1 ELSE PROV.ANO END
AND MES = CASE WHEN (PROV.MES-1 = 0) THEN 12 ELSE PROV.MES-1 END
) AS PROVFERMESANT,
(SELECT VALPROVFER FROM PFHSTPROV (NOLOCK)
WHERE CHAPA = FUNC.CHAPA
AND ANO = CASE WHEN (PROV.MES-1 = 0) THEN PROV.ANO-1 ELSE PROV.ANO END
AND MES = CASE WHEN (PROV.MES-1 = 0) THEN 12 ELSE PROV.MES-1 END
)*0.288 AS PROVINSSMESANT,
(SELECT VALPROVFER FROM PFHSTPROV (NOLOCK)
WHERE CHAPA = FUNC.CHAPA
AND ANO = CASE WHEN (PROV.MES-1 = 0) THEN PROV.ANO-1 ELSE PROV.ANO END
AND MES = CASE WHEN (PROV.MES-1 = 0) THEN 12 ELSE PROV.MES-1 END
) * 0.08 AS PROVFGTSMESANT,
PROV.VALPROVFER AS PROVFERMES, PROV.VALPROVFER*0.288 AS PROVINSSMES,
PROV.VALPROVFER*0.08 AS PROVFGTSMES,
FROM PFUNC FUNC (NOLOCK)
JOIN PFHSTPROV PROV (NOLOCK) ON FUNC.CHAPA = PROV.CHAPA
AND FUNC.CODCOLIGADA = PROV.CODCOLIGADA
WHERE FUNC.CODSITUACAO = 'A'
AND ANO = @ANO
AND MES = @MES