現在、私は電子メールカテゴリのリストを持っています。私は人とそのカテゴリを選択しました。サブカテゴリを持つカテゴリの動的ピボット
これで、各電子メールカテゴリに、そのカテゴリ内のタイプにリンクするIDが割り当てられる可能性があるという要件が追加されました。
たとえば、Parentという電子メールカテゴリは、クラステーブルにリンクされた特定のクラスIDの列を持つことができます。 これで、選択したカテゴリと「サブカテゴリ」をリストする必要があります。
Name CategoryName ClassId
Test1 Parent 23 //23 is reception class
Test1 General Null
Test2 Parent Null
Test3 Committee Null
Test3 Parent 24 // 24 is year 1
を次のように
私の表は、私がリンクされたクラスのない単なるカテゴリでそれを取得するには、次のSQLを使用しています
Name | Parent | Parent-Reception | Parent-Year1 | Committee | General
Test1 | 1 | 1 | 0 | 0 | 1
Test2 | 1 | 0 | 0 | 0 | 0
Test3 | 1 | 0 | 1 | 1 | 0
をされてほしい何に似ています。
DECLARE @colsSelect AS NVARCHAR(MAX),
@cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @colsSelect = STUFF((SELECT distinct ', ISNULL(' + QUOTENAME(c.CategoryName) + ',0) AS ' + QUOTENAME(c.CategoryName)
FROM dbo.EmailCategory c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.CategoryName)
FROM dbo.EmailCategory c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT FirstName, LastName, Email, ' + @colsSelect + ' from
(
SELECT DISTINCT
dbo.[User].Name,
dbo.EmailCategory.CategoryName,
1 as assigned
FROM dbo.[User] INNER JOIN
dbo.EmailPreferences ON dbo.[User].ID = dbo.EmailPreferences.UserID LEFT OUTER JOIN
dbo.EmailCategory ON dbo.EmailPreferences.EmailCategoryID = dbo.EmailCategory.ID
WHERE
(dbo.[User].Email <> '''') AND (dbo.[User].Email IS NOT NULL) ) x
pivot
(
max(assigned)
for CategoryName in (' + @cols + ')
) p '
execute(@query)
このタイプのSQLを使用しても可能ですか?
なぜ 'Test3'に' Parent'の値を0にしますか? –
申し訳ありませんが、タイプミス。今更新されました。 – Bex