SQL 类别名称的动态透视 1/0 0 而不是 null

SQL Dynamic Pivot on Category Names 1/0 0 instead of null

我有如下数据:

Name   CategoryName
Test1  cat1
Test1  cat2
Test2  cat1
Test3  cat2

我想显示它,以便在类别名称下获得 1/0 (true/false) 的用户列表:

Name   cat1  cat2
Test1  1     1
Test2  1     0
Test3  0     1

使用以下 sql 我可以生成 1,但我不知道如何获得 0。

注意:sql 获取类别中的用户比我实际使用的要简单得多,因此可能不完全正确

 DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.CategoryName) 
            FROM   Category c 
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

        set @query = 'SELECT Name, ' + @cols + ' from 
            (
                SELECT Name 
                       CategoryName,
                            1 as assigned
                FROM        User INNER JOIN
                      UserCategory ON User.ID = UserCategory.UserID             

           ) x
            pivot 
            (
                 max(assigned)
                for CategoryName in (' + @cols + ')
            ) p '

            execute(@query)

我可以更新它以生成 1/0 而不是 1/null 吗?

编辑 - 解决方案 感谢@Tab Allerman

我更新了这个所以我有 2 个 cols 变量

SET @colsForSelect = STUFF((SELECT distinct ', ISNULL(' + QUOTENAME(c.CategoryName) + ',0) AS ' + QUOTENAME(c.CategoryName)
            FROM   Category c 
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

并保留了原来的@cols。 我在查询的开头使用了@colsForSelect,然后在'pivot for' 中使用了原始的@cols。 我希望这对任何需要帮助的人都有意义

SET @cols = STUFF((SELECT distinct ', ISNULL(' + QUOTENAME(c.CategoryName) + ',0) AS ' + QUOTENAME(c.CategoryName)