[英]SQL Server CASE using 2 different Tables
我试图在CASE语句中使用两个不同的表,但确实很挣扎。 我的大部分SQL知识都是自学成才的,因此发现这有点困难!
我想要达到的结果是,如果TC.ClockingStatus为1,则为'24'( 第1个表 );如果不是,则为OP.Status;当'C',则为99;当'I',则为50 ELSE 0 END( 第2个表 )。
这是我当前的声明:
SELECT TOP (100) PERCENT
RTRIM(OP.Standard_Op) AS TaskDescription,
OP.Op_Number AS OpStep,
CAST(CAST(OP.Works_Order_Number AS DECIMAL(12, 2)) AS NVARCHAR(50)) AS OrderCode,
CASE OP.Status
WHEN 'C' THEN 99
WHEN 'I' THEN 50
ELSE 0
END AS Status,
CAST(OP.Op_Number AS varchar(50)) AS OpCode,
CAST(CAST(OP.Works_Order_Number AS decimal(12, 2)) AS nvarchar(50)) + '_' + CAST(OP.Op_Number AS nvarchar(50)) AS JobCode,
TC.ClockingStatus
FROM
dbo.PROGRESS AS OP
INNER JOIN
dbo.vOrcData_ActiveOperations AS AW ON AW.Works_Order = OP.Works_Order_Number
AND AW.Op_Number = OP.Op_Number
INNER JOIN
dbo.WOHEAD AS WH ON WH.Works_Order = OP.Works_Order_Number
INNER JOIN
dbo.RESOURCE AS RR ON RR.Resource_Code = OP.Original_Resource_Code
LEFT OUTER JOIN
dbo.Techman_WOCLOCK AS TC ON OP.Works_Order_Number = TC.OrderCode
AND OP.Op_Number = TC.OpStep
LEFT OUTER JOIN
dbo.MEMO_FIELDS_SQL ON dbo.MEMO_FIELDS_SQL.Memo_Unique = OP.Man_Memo_Unique
LEFT OUTER JOIN
(SELECT
Allocated_WO_Num, Sub_Con_Op_No,
MAX(Date_Promised) AS Date_Promised
FROM
dbo.PODETAIL AS PODETAIL_1
GROUP BY
Allocated_WO_Num, Sub_Con_Op_No) AS PODETAIL ON PODETAIL.Allocated_WO_Num = OP.Works_Order_Number
AND PODETAIL.Sub_Con_Op_No = OP.Op_Number
LEFT OUTER JOIN
(SELECT
Works_Order, Operation,
SUM(Operation_Time) AS TimeComplete
FROM
dbo.WOCLOCK
GROUP BY
Works_Order, Operation) AS CLOCKEDTIME ON WH.Works_Order = CLOCKEDTIME.Works_Order AND OP.Op_Number = CLOCKEDTIME.Operation
可以在case语句中使用不同的列/表达式,但是您不能像在第一个WHEN
之前那样命名该列。
尝试这个:
CASE
WHEN TC.ClockingStatus = 1 THEN 24
WHEN OP.Status = 'C' THEN 99
WHEN OP.Status = 'I' THEN 50
ELSE 0 END
WHEN
测试中的表达式可以任意复杂。 您甚至可以嵌套CASE
语句:
CASE
WHEN TC.ClockingStatus = 1 THEN 24
ELSE CASE OP.Status
WHEN 'C' THEN 99
WHEN 'I' THEN 50
ELSE 0
END
END
我认为您的问题是您尝试使用CASE
表单:
CASE <Field> WHEN <Value> THEN <Result>
您需要使用以下形式:
CASE WHEN <Any condition no matter how complicated> THEN <Result>
例:
CASE OP.Status WHEN 'C' THEN 99 ELSE 0 END
也可以用作:
CASE WHEN OP.Status='C' THEN 99 ELSE 0 END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.