来自 JOIN 表的 PIVOT
Posted
技术标签:
【中文标题】来自 JOIN 表的 PIVOT【英文标题】:PIVOT from JOIN tables 【发布时间】:2017-03-30 02:08:43 【问题描述】:我有一个大型数据库,在这个数据库中,我需要从两个表中提取信息。通过使用 JOIN 和 CASE WHEN,我已经从两个表中提取了我需要的所有数据。这是输出的屏幕截图
SQL Server output
这是我用来拉数据的代码:
SELECT [PORTMultiMax].[dbo].cardholdertable.cardid as CardID,CardHolderTable.FirstName as FirstName,CardHolderTable.LastName as LastName, CardHolderTable.InitLet as MI, CardHolderPersonalDataXrTable.PersonalDataItem as Data,
CASE WHEN PersonalDataID = '4' THEN 'SSN'
WHEN PersonalDataID = '22' THEN 'Employer'
WHEN PersonalDataID = '30' THEN 'Training Type'
WHEN PersonalDataID = '32' THEN 'Primary Sponsor'
WHEN PersonalDataID = '37' THEN 'Training Date'
ELSE NULL END AS Description
FROM [PORTMultiMax].[dbo].[CardHolderTable]
join [PORTMultiMax].[dbo].[CardHolderPersonalDataXrTable]
on cardholdertable.CardID=CardHolderPersonalDataXrTable.CardID
where PersonalDataID IN (4,22,30,32,33,37)
order by LastName
涉及的表命名为:CardHolderTable 和 CardHolderPersonalDataXrTable 接下来我需要做的是摆脱数据中的重复名称条目。例如,“JAMES AARON”有多个行,因为他有多个描述符(“Training Date、TrainingType、Employer 和 SSN”)。
我想尝试使用 PIVOT 来提取行数据并将它们放入名为“SSN、雇主等...”的列中。我的问题是我以前从未使用过 PIVOT,我对如何将 PIVOT 代码应用于我当前的 SQL 查询感到困惑。
请帮忙。非常感谢
【问题讨论】:
编辑您的问题并提供示例数据和所需结果。或者就该信息提出另一个问题。 【参考方案1】:鉴于您的查询,我认为条件聚合更简单:
SELECT ch.FirstName, ch.LastName
MAX(CASE WHEN PersonalDataID = '4' THEN 1 ELSE 0 END) as is_SSN
MAX(CASE WHEN PersonalDataID = '22' THEN ELSE 0 END) as is_Employer,
MAX(CASE WHEN PersonalDataID = '30' THEN ELSE 0 END) as is_TrainingType,
MAX(CASE WHEN PersonalDataID = '32' THEN ELSE 0 END) as is_PrimarySponsor,
MAX(CASE WHEN PersonalDataID = '37' THEN ELSE 0 END) as is_TrainingDate
from [PORTMultiMax].[dbo].[CardHolderTable] ch join
[PORTMultiMax].[dbo].[CardHolderPersonalDataXrTable] cp
on ch.CardID = cp.CardID
where PersonalDataID IN (4, 22, 30, 32, 33, 37)
group by ch.FirstName, ch.LastName;
【讨论】:
这肯定让我更接近,但我需要将个人数据项列中的数据放在新创建的列下。如果此人的名字是 John Smith,并且他有 SSN、雇主和培训类型,那么结果将是:John Smith 123-45-6789 Disney World Badge Disney World 01/01/2015以上是关于来自 JOIN 表的 PIVOT的主要内容,如果未能解决你的问题,请参考以下文章
C# SqlDataAdapter 与来自多个数据库的表的 JOIN
C# SqlDataAdapter 与来自多个数据库的表的 JOIN
来自三个表的 JOIN 和 GROUP_CONCAT 的意外结果