【问题标题】:Case within Case when combining multiple columns into one将多列合并为一列时的案例中的案例
【发布时间】:2013-09-19 02:41:11
【问题描述】:

我正在尝试创建一个查询,该查询将在视图中获取多列并将其放入查询中的一列。每列的值需要用“|”分隔(管道)。

我试过了:

1) (expression1 + '|' + expression2) AS xxxx,但如果一个表达式有一个空值,它会使结果为“空”。

2) CAST (expression1 as varchar (10)) + '|' + CAST (expression2 as varchar (10)) AS xxxx,但得到相同的结果。

3) CASE (expression1 is null) then (' ') else (expression1) +'|' + CASE (expression2 is null) then (' ') else (expression2) END AS xxxx,但在关键字 'AS'. 附近出现语法错误

这是使用 CASE 的完整查询。

SELECT DISTINCT dbo.REG.BUILDING, dbo.REG.CURRENT_STATUS, dbo.REG_CONTACT.LOGIN_ID, dbo.REG.LAST_NAME
, CASE WHEN dbo.View_MYAccess_Period1.CRSGRP1 is null then ' ' else        dbo.View_MYAccess_Period1.CRSGRP1 + ' |' +
  CASE WHEN dbo.View_MYAccess_Period2.CRSGRP2 is null then ' ' else dbo.View_MYAccess_Period2.CRSGRP2
END AS CRSGRP

FROM  dbo.REG_CONTACT RIGHT OUTER JOIN
dbo.REG_STU_CONTACT ON dbo.REG_CONTACT.CONTACT_ID = dbo.REG_STU_CONTACT.CONTACT_ID RIGHT OUTER JOIN 
dbo.REG ON dbo.REG_STU_CONTACT.STUDENT_ID = dbo.REG.STUDENT_ID LEFT OUTER JOIN 
dbo.View_MYAccess_Period1 ON dbo.REG.STUDENT_ID = dbo.View_MYAccess_Period1.STUDENT_ID LEFT OUTER JOIN
dbo.View_MYAccess_Period2 ON dbo.REG.STUDENT_ID = dbo.View_MYAccess_Period2.STUDENT_ID

对这个新手的任何帮助将不胜感激!

【问题讨论】:

  • 你用的是什么数据库?
  • 抱歉,这会有所帮助。 SQLServer 2005。

标签: sql casting case


【解决方案1】:

使用 ISNULL 函数,

SELECT DISTINCT dbo.REG.BUILDING, dbo.REG.CURRENT_STATUS, dbo.REG_CONTACT.LOGIN_ID, dbo.REG.LAST_NAME
, ISNULL(dbo.View_MYAccess_Period1.CRSGRP1,' ') + ' |' +
  ISNULL(dbo.View_MYAccess_Period2.CRSGRP2,' ') CRSGRP

FROM  dbo.REG_CONTACT RIGHT OUTER JOIN
dbo.REG_STU_CONTACT ON dbo.REG_CONTACT.CONTACT_ID = dbo.REG_STU_CONTACT.CONTACT_ID RIGHT OUTER JOIN 
dbo.REG ON dbo.REG_STU_CONTACT.STUDENT_ID = dbo.REG.STUDENT_ID LEFT OUTER JOIN 
dbo.View_MYAccess_Period1 ON dbo.REG.STUDENT_ID = dbo.View_MYAccess_Period1.STUDENT_ID LEFT OUTER JOIN
dbo.View_MYAccess_Period2 ON dbo.REG.STUDENT_ID = dbo.View_MYAccess_Period2.STUDENT_ID

【讨论】:

    【解决方案2】:

    在示例 1 中,您可以使用 COALESCE(expression, fallback) 函数来强制 expression 在表达式为空时返回一个备用值。 (然后相应地调整其余的逻辑。)

    在您的示例 3 中,您需要另一个 END 关键字:

    CASE
        (expression1 is null) then (' ')
        ELSE (expression1) +'|' +
            CASE (expression2 is null) then (' ') else (expression2) END
    END AS xxxx
    

    【讨论】:

    • 感谢您的帮助。知道做某事的多种方式是件好事。 COALesce 工作,但我仍然收到一个错误,但这次是在键 'IS' 附近的语法不正确。
    猜你喜欢
    • 1970-01-01
    • 2012-09-26
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多