0
我目前有一个电子邮件类别的列表,我列出了人,他们选择了哪些类别。动态枢轴上有子类别的类别
我现在有一个要求,每个电子邮件分类可能可能有一个分配给其链接到该类别中的一个类型的ID。
例如称为父电子邮件类别可能对链接到一类表中特定类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
我想要些什么是
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
我使用下面的SQL只类别没有链接类得到它。
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'值为零? –
对不起,错字。现在更新。 – Bex