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)
我有如下数据:
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)