MS SQL Server 2008R2 Management Studio
我在两张桌子上运行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'
但它不起作用。
答案 0 :(得分:2)
您可以使用稍微更健壮的case
语法,并将案例表达为条件而不仅仅是可能的值:
SELECT name,
CASE WHEN table1.tag = 'Y' THEN 'other string'
WHEN codes.[desc] = 'string1' THEN 'String 1'
WHEN codes.[desc] = 'string2' THEN 'String 2'
WHEN codes.[desc] = 'string3' THEN 'String 3'
WHEN codes.[desc] = 'string4' THEN 'String 4'
END AS description
FROM table1
JOIN codes ON table1.code = codes.code
答案 1 :(得分:1)
你很亲密,但我认为这正是你要找的。他们在不同的表格中的事实对CASE来说并不重要,只是加入:
SELECT name,
Case WHEN Table1.tag = 'Y'
then CODES.Desc
ELSE 'Other String'
END as description
FROM TABLE1
join CODES on TABLE1.code = CODES.code
答案 2 :(得分:1)
我还不能对帖子发表评论。但是,如果你要改变描述,为什么还要有一个包含代码描述的代码表呢?相反,您应该只修改该表中的当前描述,或者添加一个包含所需辅助描述的列。然后案例陈述要复杂得多。
CASE WHEN TABLE1.tag = 'Y'
THEN 'Other String'
ELSE CODES.other_desc
END AS description