我有4个案例语句完全相同的CASE
条件,但它们都有不同的THEN/ELSE
语句。
是否可以将其全部合二为一,或者我是否需要将这些全部分开并多次复制和粘贴代码?
,CASE WHEN lm.Id IN ('1','2','3') THEN lm.name ELSE lm.Desc END AS [Column1]
,CASE WHEN lm.Id IN ('1','2','3') THEN '3' ELSE '1' END AS [Column2]
,CASE WHEN lm.Id IN ('1','2','3') THEN 'True' ELSE 'False' END AS [Column3]
用较少的代码可以做到这一点吗?
答案 0 :(得分:9)
我不认为这在严格的SQL中是可行的。某些数据库引擎可能会支持它作为扩展。你可以通过其他机制在功能上完成同样的事情,但是......可能有一个JOIN或一个UNION。
答案 1 :(得分:1)
建议UNION
您的结果集。它不会减少代码行数,但可能更具可读性。
SELECT [name], '3', 'True'
From Mytable WHERE ID IN ('1','2','3')
UNION
SELECT [desc], '1', 'False'
From Mytable WHERE ID NOT IN ('1','2','3')
答案 2 :(得分:1)
为什么不使用update
尝试where
表格?在问题的select
声明中,您可以将Column1
,Column2
和Column3
声明为NULL
,并使用两个update
语句更改值。
“只有”三列取决于相同的case
语句,下面的代码不会节省太多的输入(可能是执行时间......?)但是当你有超过3时它会很方便...
UPDATE MyTable
SET Column1 = lm.name,
Column2 = '3',
Column3 = 'True'
WHERE lm.Id IN ('1','2','3')
UPDATE MyTable
SET Column1 = lm.Desc,
Column2 = '1',
Column3 = 'False'
WHERE lm.Id NOT IN ('1','2','3')
答案 3 :(得分:0)
对于您给出的示例,我不会尝试进行任何更改。如果你的测试(当时......那么)涉及更多的计算,或者如果它经常重复,你可以考虑设置一个子查询来评估它。但只有少量的重复,为什么要这么麻烦?您拥有的代码易于阅读,执行起来并不昂贵。