2016-05-11 17 views
0

次のように私はデータを持っている: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を使用しました。 助けが必要な人には、これが意味をなさないことを願っています。

+1

ISNULL()? COALESCE()? –

+0

どこに追加すればよいですか?ピボットビットで?これは私がこれまでに試みた最初のピボットです。 – Bex

+0

STUFFにあります。カテゴリ名の周り。 –

答えて

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

ありがとうございますが、ピボットを作っているので、これを動作させることができません。 ( ( '+ @cols +')内のCategoryNameの最大番号 )pに[ISNULL(cat1,0)AS cat1]がありますそれと間違った構文エラーを投げます(1つのカテゴリで) – Bex

+0

それを無視してください。 @cols変数を2つ作成しました。ピボットのための選択とオリジナルのための新しいもの – Bex

+1

ああ、それを言いました。 :) –

関連する問題