以下是我的剧本:
SELECT
*
,CASE WHEN (Confirmed = 'YES' AND R.Performed IS NULL AND (R.Name NOT LIKE 'C%' OR R.Name NOT LIKE 'Q%'))
THEN s.Description = 'CONFIRMED'
END
FROM
Repair r
INNER JOIN
Conversion C
ON
R.Confirmed = C.confirmed
AND
r.performed = c.performed
INNER JOIN
Status s
ON
a.name = s.name
WHERE
Status = 'CONFIRMED'
AND
Received BETWEEN '01-31-2013' AND '12-31-2013'
and part = '4'
注意:我在案例陈述中的最后'='
和'END'
下获得了红色方形。
我的语法有什么问题?
答案 0 :(得分:0)
我不清楚你想要完成什么,但这样的事情是你可能需要的
,CASE WHEN (Confirmed = 'YES' AND R.Performed IS NULL
AND (R.Name NOT LIKE 'C%' OR R.Name NOT LIKE 'Q%'))
THEN 'CONFIRMED' ELSE s.Description END AS Description
如果您只是想在确认时更改说明的值='是'然后以下工作
,CASE WHEN Confirmed = 'YES' THEN 'CONFIRMED' ELSE s.Description END AS Description
您还需要不使用SELECT *
,并且每个列都单独标识,因此Description
在选择中不会出现两次。我不确定为什么s.Description IS NULL AND ...
不属于您的CASE条件,如果您正试图填写缺失的说明。
答案 1 :(得分:0)
您的CASE
声明应如下所示。您收到错误的原因是您尝试向description
列s.Description = 'CONFIRMED'
添加值,这是不允许的。
CASE WHEN (Confirmed = 'YES' AND R.Performed IS NULL
AND (R.Name NOT LIKE 'C%' OR R.Name NOT LIKE 'Q%'))
THEN 'CONFIRMED' END AS Description
答案 2 :(得分:0)
试着追随你真正想要的东西和它的努力,但我想你想要的东西是:
SELECT r.confirmed
,r.status
,a.name
,<other fields>
,CASE WHEN ( Confirmed = 'YES'
AND R.Performed IS NULL
AND ( R.Name NOT LIKE 'C%'
OR R.Name NOT LIKE 'Q%')
)
THEN 'CONFIRMED'
ELSE s.Description
END AS Description
FROM <your joined and filtered tables>
我认为,您只需要在此选择查询的输出中更改s.description,而不是在源表中更改。
答案 3 :(得分:0)
试试这个
CASE s.Description WHEN (Confirmed = 'YES' AND R.Performed IS NULL AND (R.Name NOT LIKE 'C%' OR R.Name NOT LIKE 'Q%'))
THEN 'CONFIRMED'
END
我没有使用else部分,因为你没有在你的代码中使用它,它不会导致任何语法错误