【发布时间】:2017-04-18 13:13:55
【问题描述】:
我正在尝试使用 Case 语句来查找表格,如果表格显示阶段 06 和阶段 11,那么如果只显示阶段 06,则认为这是已修改的,那么这不是修改。
我当前的代码是:
DECLARE
@DATE1 DATETIME = '04/01/2017',
@DATE2 DATETIME = '04/30/2017',
@RAISEDBY VARCHAR (10) = 'CAROLIND'
SELECT DISTINCT
J.[RAISED-BY],
J.[JOB-NO],
J.[JOB-STATUS],
J.[DATE-LOGGED],
J.[CURRENT-STAGE-CODE],
J.[ORIG-LOGGED-VALUE] AS "LOGGED-VALUE",
J.[TOTAL-VALUE],
J.[SHORT-DESCRIPTION],
J.[CONTRACTOR],
C.[DESCRIPTION],
CASE
WHEN SH.[STAGE-CODE] = '06' AND SH.[STAGE-CODE] = '11' THEN 'YES'
ELSE 'NO'
END AS "AMENDED"
FROM
DBO.[JOB] AS J
LEFT OUTER JOIN
DBO.[CONT] as C ON C.CONTRACTOR = J.CONTRACTOR
LEFT OUTER JOIN
DBO.[JOB-STAGE-HISTORY] AS SH ON SH.[JOB-NO] = J.[JOB-NO]
WHERE
J.[DATE-LOGGED] BETWEEN @DATE1 AND @DATE2
AND
J.[RAISED-BY] = @RAISEDBY
AND
SH.[JOB-NO] = 'W0423540'
ORDER BY
J.[RAISED-BY],
J.[JOB-NO]
当它为“YES”时,此查询当前返回“NO”,因为 Job Stage History 表中有 06 和 11 行。
谢谢
查询结果
工作阶段历史表
【问题讨论】:
-
这是一个 case 表达式,而不是 case 语句。 (它返回一个值。)
-
您是否正在寻找行的值是 06 以及 11?它将按行选择。你是说OR吗?
-
如果 06 和 11 存在,这应该返回单行修正 = 是,如果只有 06 存在则返回单行修正 = 否
-
我建议(1)简化查询和问题; (2) 在问题中提供样本数据和期望的结果。
-
@TheWeblord2000 如果您在问题中包含所需的结果会更好。
标签: sql sql-server tsql case