select 基于两个表的CASE语句
select CASE statement based on two tables
MS SQL Server 2008R2 Management Studio
我是 运行 两个 table 的 SELECT
。我会将其简化为遇到问题的部分。我需要将 SELECT
结果修改为特定格式以进行数据导入。我的 CASE
语句工作正常,直到我需要将 WHEN ... THEN...
基于不同的 table 列
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
table
我尝试添加:
Case CODES.desc
.....
when TABLE1.tag = Y then CODES.desc 'Other String'
但是没用。
您可以使用稍微更健壮的 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
你很接近,但我认为这就是你要找的。它们在不同表中的事实对 CASE 来说并不重要,只是 JOIN:
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
我还不能对 post 发表评论。但是,如果您无论如何都要更改描述,为什么要使用代码 table 和代码描述呢?相反,您应该只修改 table 中的当前描述或添加一个包含您需要的次要描述的列。那么case语句就不那么复杂了。
CASE WHEN TABLE1.tag = 'Y'
THEN 'Other String'
ELSE CODES.other_desc
END AS description
MS SQL Server 2008R2 Management Studio
我是 运行 两个 table 的 SELECT
。我会将其简化为遇到问题的部分。我需要将 SELECT
结果修改为特定格式以进行数据导入。我的 CASE
语句工作正常,直到我需要将 WHEN ... THEN...
基于不同的 table 列
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
table
我尝试添加:
Case CODES.desc
.....
when TABLE1.tag = Y then CODES.desc 'Other String'
但是没用。
您可以使用稍微更健壮的 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
你很接近,但我认为这就是你要找的。它们在不同表中的事实对 CASE 来说并不重要,只是 JOIN:
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
我还不能对 post 发表评论。但是,如果您无论如何都要更改描述,为什么要使用代码 table 和代码描述呢?相反,您应该只修改 table 中的当前描述或添加一个包含您需要的次要描述的列。那么case语句就不那么复杂了。
CASE WHEN TABLE1.tag = 'Y'
THEN 'Other String'
ELSE CODES.other_desc
END AS description