次のように私はデータを持っている:SQL動的ピボットは0 1/0カテゴリ名の代わりにヌル
Name CategoryName
Test1 cat1
Test1 cat2
Test2 cat1
Test3 cat2
私は偽/(真の私は、ユーザーのリストを取得するように1/0でそれを表示したいです)カテゴリ名の下に、次のSQLを使用して
Name cat1 cat2
Test1 1 1
Test2 1 0
Test3 0 1
私は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)
完全に正確ではないかもしれないものからlified私はむしろ、1/nullに比べ、1/0を生成し、これを更新することはできますか?
EDIT - ソリューション@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を使用し、次に 'for for'で元の@colsを使用しました。 助けが必要な人には、これが意味をなさないことを願っています。
ISNULL()? COALESCE()? –
どこに追加すればよいですか?ピボットビットで?これは私がこれまでに試みた最初のピボットです。 – Bex
STUFFにあります。カテゴリ名の周り。 –