sql - 基于两个表的select CASE语句

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 语法并将案例表示为条件,而不仅仅是可能的值:

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

https://stackoverflow.com/questions/33742036/

相关文章:

three.js - 是否可以在 Three.js 中使用带缓冲几何的三角形带?

python - 如何在python中为字符串添加前缀和后缀

r - 将 3D 表面拟合到点数据集 [R]

verilog - systemverilog 中逻辑语句的非常量索引

caching - 查找处理器的多级缓存的 AMAT 和 CPI

c# - 在列表中查找一个属性包含重复值的对象

r - R中的钟形百分位曲线

rx-java - 将热 Observable 转换为冷 Observable

arrays - 将数组附加到数组

windows - 使用 vmware 机器进行内核调试