SQL Server:在Select中显示NULL的默认值

时间:2014-04-02 11:18:55

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

我有一个基于某些选择创建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')

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

2 个答案:

答案 0 :(得分:3)

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

 ISNULL ( column , default_value )

答案 1 :(得分:1)

尝试这样的事情

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')