【问题标题】:SQL Server: show default value for NULL in SelectSQL Server:在 Select 中显示 NULL 的默认值
【发布时间】:2014-05-13 15:16:03
【问题描述】:

我有一个基于某些选择创建 XML 字符串的存储过程。

如果其中一个选择返回 NULL ,有没有一种方法可以显示默认值? 基本上我只想在我的 XML 中保持相同的结构,而不管值是否为 NULL(目前 XML 只显示具有值的记录)。

示例存储过程:

SELECT      A.ranking,
            (
                SELECT      B.groupName,
                            (
                                SELECT      C.policy,
                                            C.groupCount
                                FROM        @temp C
                                WHERE       C.ranking = A.ranking
                                AND         C.groupName = B.groupName
                                ORDER BY    C.groupCount desc, C.policy
                                FOR XML PATH(''), ELEMENTS, TYPE
                            ) AS groupName
                FROM        @temp B
                WHERE       B.ranking = A.ranking
                GROUP BY    B.groupName
                ORDER BY    B.groupName
                FOR XML PATH(''), ELEMENTS, TYPE
            )
FROM        @temp A
GROUP BY    A.ranking
ORDER BY    A.ranking
FOR XML PATH('policyRanking'), ELEMENTS, TYPE, ROOT('ranks')

非常感谢您提供的任何帮助,蒂姆。

【问题讨论】:

    标签: sql sql-server select null default-value


    【解决方案1】:

    使用ISNULL 函数,将每个可空列(参见表定义)替换为表达式:

     ISNULL ( column , default_value )
    

    【讨论】:

      【解决方案2】:

      试试这样的

      SELECT      coalesce(A.ranking,0) as ranking
                  (
                      SELECT      coalesce(B.groupName,'') as groupName,
                                  (
                                      SELECT      C.policy,
                                                  C.groupCount
                                      FROM        @temp C
                                      WHERE       C.ranking = A.ranking
                                      AND         C.groupName = B.groupName
                                      ORDER BY    C.groupCount desc, C.policy
                                      FOR XML PATH(''), ELEMENTS, TYPE
                                  ) AS groupName
                      FROM        @temp B
                      WHERE       B.ranking = A.ranking
                      GROUP BY    B.groupName
                      ORDER BY    B.groupName
                      FOR XML PATH(''), ELEMENTS, TYPE
                  )
      FROM        @temp A
      GROUP BY    A.ranking
      ORDER BY    A.ranking
      FOR XML PATH('policyRanking'), ELEMENTS, TYPE, ROOT('ranks')
      

      【讨论】:

      • 谢谢!你能解释一下 coalesce 在这里的作用吗?
      • COALESCE 如果列为 NULL,则将输入的值设置为第二个参数
      猜你喜欢
      • 1970-01-01
      • 2021-02-12
      • 2018-09-16
      • 2011-04-22
      • 2014-10-24
      • 2010-10-03
      • 2014-08-18
      • 1970-01-01
      • 2020-10-24
      相关资源
      最近更新 更多