首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过case语句进行SQL连接

通过case语句进行SQL连接
EN

Stack Overflow用户
提问于 2014-02-07 00:25:42
回答 1查看 148关注 0票数 1

这将根据需要创建由分号分隔的两个字符子字符串,并通过自定义函数删除尾随的分号。

代码语言:javascript
复制
    CASE 
        WHEN ISNULL(mcp.N5_5_CARE_INTENT,'') <> 'X'
        THEN
        NULLIF(dbo.RemoveLastCharacter
        (COALESCE(mcp.N5_6_TREATMENT_TYPE_1 + ';','') + 
        COALESCE(mcp.N5_6_TREATMENT_TYPE_2 + ';','') +
        COALESCE(mcp.N5_6_TREATMENT_TYPE_3 + ';','') +
        COALESCE(mcp.N5_6_TREATMENT_TYPE_4 + ';','')),'')
        ELSE NULL
        END PlannedTreatmentType

但这还不够,因为我希望两个字符子串和最终的连接只包含:

代码语言:javascript
复制
    '01', '02', '03', '05', '06'

如果有一个子字符串不是其中之一,那么应该返回NULL。

例如

代码语言:javascript
复制
    01;05;06

是好的,所以也是好的

代码语言:javascript
复制
    06;01

代码语言:javascript
复制
    01;07

代码语言:javascript
复制
    09;08su

这必须与SQL2000兼容。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-02-07 00:58:51

在将每个值放入字符串之前,您需要对其进行测试。此外,您还可以使用stuff()方法来代替您的函数。

代码语言:javascript
复制
(CASE WHEN ISNULL(mcp.N5_5_CARE_INTENT,'') <> 'X'
      THEN stuff((case when mcp.N5_6_TREATMENT_TYPE_1 in ('01', '02', '03', '05', '06')
                       then ';'+mcp.N5_6_TREATMENT_TYPE_1 
                       else ''
                   end) +
                 (case when mcp.N5_6_TREATMENT_TYPE_2 in ('01', '02', '03', '05', '06')
                       then ';'+mcp.N5_6_TREATMENT_TYPE_2
                       else ''
                   end) +
                 (case when mcp.N5_6_TREATMENT_TYPE_3 in ('01', '02', '03', '05', '06')
                       then ';'+mcp.N5_6_TREATMENT_TYPE_3
                       else ''
                   end) +
                 (case when mcp.N5_6_TREATMENT_TYPE_4 in ('01', '02', '03', '05', '06')
                       then ';'+mcp.N5_6_TREATMENT_TYPE_4 
                       else ''
                   end)
                ), 1, 1, '')
     ELSE NULL
 END) as PlannedTreatmentType

stuff()将任意字符序列替换为另一个值。使用参数1, 1, '',它删除字符串的第一个字符。请注意,分号现在位于值的开头,而不是结尾。

顺便说一句,将这些值存储在一行查看中可能是一个错误。也许您应该考虑创建一个表,其中每个实体(可能是患者)有一行,每个治疗类型有一行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21608431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档