我很想知道在下面的查询中我将在何处以及如何使用CASE
语句,但仅适用于外部查询,即最终结果。我希望我的CASE
语句反映这些值,即CASE WHEN 'TOTAL OH INV' - P1.[REM PLAN QTY] < = 100 THEN 'URGENT'
等,以获得不同的资格。这会在我第一次选择后直接开始吗?
DECLARE @number as int
SET @number = CASE
WHEN DATENAME(dw,GETDATE()) = 'Monday'
THEN 56
WHEN DATENAME(dw,GETDATE()) = 'Tuesday'
THEN 57
WHEN DATENAME(dw,GETDATE()) = 'Wednesday'
THEN 58
WHEN DATENAME(dw,GETDATE()) = 'Thursday'
THEN 59
WHEN DATENAME(dw,GETDATE()) = 'Friday'
THEN 60
END;
SELECT P1.PLANT_CODE,
P1.STOCK_CATEGORY,
P1.MATERIAL,
M1.DESCRIPTION,
M1.DEPT,
M1.RMH_PRODUCT_DIVISION,
M1.RMH_GENDER_AGE,
P1.DISTRIBUTION_VERSION_CODE,
P1.PERIOD_CODE,
P1.REQUIREMENTS_DATE,
P1.VERSION_IND_FLAG,
P1.TECHNICAL_INDEX,
P1.SIZE_LITERAL,
P1.[ORIGINAL FCST QTY],
P1.WITHDRAWN_QUANTITY,
P1.[REM PLAN QTY],
P2.FUTURE_FCST,
SUM(I1.ON_HAND_QUANTITY) AS 'TOTAL_OH_INV'
FROM
(SELECT P.PLANT_CODE,
P.STOCK_CATEGORY,
P.MATERIAL,
P.DISTRIBUTION_VERSION_CODE,
P.PERIOD_CODE,
P.REQUIREMENTS_DATE,
P.PLANNED_QTY AS 'REM PLAN QTY',
P.VERSION_IND_FLAG,
P.SIZE_LITERAL,
P.WITHDRAWN_QUANTITY,
P.TECHNICAL_INDEX,
P.PLANNED_QTY + P.WITHDRAWN_QUANTITY AS 'ORIGINAL FCST QTY'
FROM VW_PLANNED_REQMNTS_TXT P
WHERE P.PLANT_CODE IN ('6040','6041')
AND P.STOCK_CATEGORY IN ('A60385000','A60385003')
AND P.DISTRIBUTION_VERSION_CODE IN ('00','01','ZU','Z2')
AND P.REQUIREMENTS_DATE < GETDATE() - @number
AND P.PLANNED_QTY > 0) AS P1
LEFT OUTER JOIN
(SELECT
SUM(P.PLANNED_QTY) AS 'FUTURE_FCST',
P.MATERIAL,
P.TECHNICAL_INDEX
FROM VW_PLANNED_REQMNTS_TXT P
WHERE P.REQUIREMENTS_DATE >= GETDATE()
AND P.PLANNED_QTY > 0
AND P.STOCK_CATEGORY IN ('A60385000','A60385003')
GROUP BY P.MATERIAL,
P.TECHNICAL_INDEX,
P.SIZE_LITERAL) AS P2
ON P1.MATERIAL = P2.MATERIAL
AND P1.TECHNICAL_INDEX = P2.TECHNICAL_INDEX
LEFT OUTER JOIN
(SELECT I.ON_HAND_QUANTITY,
I.TECHNICAL_INDEX,
I.MATERIAL,
I.STOCK_CATEGORY,
I.PLANT_CODE
FROM VW_INVENTORY I
WHERE I.STOCK_CATEGORY IN ('A60385000','A60385003')
GROUP BY I.TECHNICAL_INDEX,
I.MATERIAL,
I.STOCK_CATEGORY,
I.ON_HAND_QUANTITY,
I.PLANT_CODE) AS I1
ON P1.MATERIAL = I1.MATERIAL
AND P1.TECHNICAL_INDEX = I1.TECHNICAL_INDEX
AND P1.PLANT_CODE = I1.PLANT_CODE
LEFT OUTER JOIN
(SELECT M.MATERIAL,
M.DESCRIPTION,
M.DEPT,
M.SUB_SEGMENT,
M.RMH_PRODUCT_DIVISION,
M.RMH_GENDER_AGE,
M.RMH_CATEGORY
FROM VW_MM_MATERIAL M) AS M1
ON P1.MATERIAL = M1.MATERIAL
GROUP BY P1.PLANT_CODE,
P1.STOCK_CATEGORY,
P1.MATERIAL,
P1.DISTRIBUTION_VERSION_CODE,
P1.PERIOD_CODE,
P1.REQUIREMENTS_DATE,
P1.[REM PLAN QTY],
P1.VERSION_IND_FLAG,
P1.WITHDRAWN_QUANTITY,
P1.SIZE_LITERAL,
P1.TECHNICAL_INDEX,
P1.[ORIGINAL FCST QTY],
P2.FUTURE_FCST,
M1.DESCRIPTION,
M1.DEPT,
M1.RMH_PRODUCT_DIVISION,
M1.RMH_GENDER_AGE
ORDER BY P1.MATERIAL,
P1.TECHNICAL_INDEX;
答案 0 :(得分:1)
我通常通过将整个select语句包装在另一个select中然后将我的case语句添加到该语句来完成此操作。即
SELECT field_list, CASE WHEN 'TOTAL OH INV' - P1.[REM PLAN QTY] < = 100 THEN 'URGENT'
FROM (put your existing select statement here)
这样,所有计算都在CASE语句之前执行,只过滤最终结果。