【发布时间】:2015-11-16 18:21:57
【问题描述】:
MS SQL Server 2008R2 管理工作室
我在两张桌子上运行SELECT。我会将其简化为我遇到问题的部分。我需要将SELECT 结果修改为某种格式以进行数据导入。我的CASE 语句工作正常,直到我需要将WHEN ... THEN... 建立在不同的表列上
TABLE1
-----------------
name | tag | code
-----------------------
name1 | N | 100
name2 | N | 100
name3 | N | 200
name4 | Y | 100
name5 | N | 400
name6 | N | 700
CODES
-------------------------
code | desc
-------------------------
100 | string1
200 | string2
300 | string2
400 | string2
700 | string2
SELECT name,
Case CODES.desc
when 'string1' then 'String 1'
when 'string2' then 'String 2'
when 'string3' then 'String 3'
when 'string4' then 'String 4'
END as description
FROM TABLE1
join CODES on TABLE1.code = CODES.code
这很好用。问题是如果TABLE1.tag = Y,那么描述需要是'Other string',它不在CODES 表中
我尝试添加:
Case CODES.desc
.....
when TABLE1.tag = Y then CODES.desc 'Other String'
但是没有用。
【问题讨论】:
-
你可以嵌套case语句。这很丑陋,但可行。基本上相当于嵌套的
if(if()) -
case when table1.tag = 'Y' then 'Other string' else (case codes.desc when 'string1' then 'String 1' when ... end) end - 不知道是否你需要括号,但至少它有助于阅读
-
您不需要括号,但它们也不会造成任何伤害。
标签: sql sql-server select case