怎么在where子句中用case when + exists

 我来答
dayinspring
高粉答主

推荐于2016-04-02 · 繁杂信息太多,你要学会辨别
知道大有可为答主
回答量:2.3万
采纳率:92%
帮助的人:3580万
展开全部
SELECT (CASE WHEN MASTERJOB = '' THEN JOBNO ELSE MASTERJOB END)WO,JOBNO,CHILDJOB,CODE,BDESC,P_CODE,
(SELECT TOP 1 BDESC FROM PRO WHERE CODE=RESVT.P_CODE)CBDESC,QTY,UNIT,LOC,
(CASE WHEN exists(SELECT top 1 TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE=RESVT.CODE AND A.WO like @gd AND B.TAXUP > 0 )
THEN
(SELECT top 1 TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE=RESVT.CODE AND B.TAXUP > 0 ) --AND charindex(@gd,WO)>0
WHEN exists(
SELECT TOP 1 B.TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE=RESVT.CODE AND B.TAXUP > 0 order by B.[DATETIME] desc )
THEN
(SELECT TOP 1 B.TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE=RESVT.CODE AND B.TAXUP > 0 order by B.[DATETIME] DESC)
ELSE
(select TOP 1 TAXUP from VQUT WHERE VQUT.CODE=RESVT.CODE order by [DATETIME] DESC)
END)DJ,
(CASE WHEN CHILDJOB='' THEN JOBNO ELSE CHILDJOB END)W,
(SELECT TOP 1 SUM(QTY) FROM MRT WHERE JOBNO=RESVT.JOBNO AND CODE=RESVT.CODE AND P_CODE=RESVT.P_CODE)T,
(SELECT TOP 1 SUM(QTY) FROM MRT WHERE JOBNO=RESVT.JOBNO AND CODE=RESVT.CODE AND P_CODE=RESVT.P_CODE AND MRNO LIKE '%HCBL%' )BL,
(select TOP 1 SUM(BADQTY+PBADQTY+RETUQTY) from PRT Left JOIN PRTUDF ON PRT.PRNO=PRTUDF.PRNO AND PRT.ITEMNO=PRTUDF.ITEMNO WHERE JOBNO=RESVT.JOBNO AND CODE=RESVT.CODE AND P_CODE=RESVT.P_CODE)TL,
(SELECT TOP 1 VEN FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)WHERE B.CODE=RESVT.CODE AND A.WO like @gd )VEN,
(SELECT TOP 1 qty_nee from #tree where #tree.code=RESVT.CODE AND #tree.p_code=RESVT.P_CODE)QTY_NEE,
(SELECT TOP 1 sh from #tree where #tree.code=RESVT.CODE AND #tree.p_code=RESVT.P_CODE)SH
FROM RESVT WHERE 1=1 and (CASE WHEN MASTERJOB = '' THEN JOBNO ELSE MASTERJOB END
mvs2008
2015-03-29 · TA获得超过611个赞
知道小有建树答主
回答量:693
采纳率:50%
帮助的人:400万
展开全部

case when一般是用在from的前面:

--1.
select case when col1='a' then 'col1 value is a' when col1='b' then col1 value is b' else 'col1 has other values' end,col2 from table1 where exists
(select 1 from table2 where id=table1.id);
--2.
select case col1 when 'a' then 'col1 value is a' when 'b' then col1 value is b' else 'col1 has other values' end,col2 from table1 where exists
(select 1 from table2 where id=table1.id);

真要用在where后面的话:

select col1,col2 from table1 where exists
(select 1 from table2 where id=table1.id)
and col2=
(
select case col2 when 'a' then 'AAAAA' when 'b' then 'BBBBB' else 'null' end
from table3 where id=table1.id
);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
老龙头上头f
2021-03-28 · TA获得超过1656个赞
知道小有建树答主
回答量:4069
采纳率:87%
帮助的人:182万
展开全部

case-单词讲解(释义、例句)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Axure夜话
推荐于2016-04-17 · 知道合伙人软件行家
Axure夜话
知道合伙人软件行家
采纳数:1197 获赞数:1344
1992年毕业于太原理工大学,20年IT公司工作经验现任山西誉海和科技有限公司技术总监,老二牛车教育课程总监

向TA提问 私信TA
展开全部
UPDATE stuMarks1
SET writtenExam=
case
when exists(select stuno from stuMarks1 where writtenExam>80)
then writtenExam-2
else
writtenExam-5
end;

相当于如下两句
UPDATE stuMarks1
SET writtenExam=writtenExam+2
where exists (select stuno from stuMarks1 where writtenExam>80);

UPDATE stuMarks1
SET writtenExam=writtenExam+5
where not exists (select stuno from stuMarks1 where writtenExam>80);
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式