【问题标题】:Sql Server Pivot with lookup table带有查找表的 Sql Server Pivot
【发布时间】:2011-09-01 16:00:18
【问题描述】:

我查看了大多数数据透视表示例,但还没有找到完全相同的场景(另外,我可能对此不感兴趣)。

我有一个员工表、一个属性表和一个匹配员工和属性的查找表:

dbo.Employees employee_ID INT 员工姓名 NVARCHAR(50) 员工ID |员工姓名 1 |乔·史密斯 2 |唐·约翰逊 dbo.Attributes 属性_ID INT 属性描述 NVARCHAR(50) 属性 ID |属性描述 50 |周末工作 55 |戴帽子 61 |喜欢棒球 dbo.EmployeeAttributes employee_attribute_ID INT employee_ID_fk INT 属性 ID_fk INT employee_attribute_ID | employee_ID_fk |属性 ID_fk 20 | 1 | 50 21 | 2 | 61 22 | 2 | 55

我试图最终得到一个结果集,其中属性显示为列,布尔值指示给定员工是否存在该属性,例如:

员工ID |员工姓名 |周末工作 |戴帽子 |喜欢棒球 1 |乔·史密斯 | 1 | 0 | 1 2 |唐·约翰逊 | 0 | 1 | 0

非常感谢任何帮助。

【问题讨论】:

  • 我有一个关于这个主题的博客here。让我知道这是否有帮助。

标签: sql sql-server sql-server-2008 pivot


【解决方案1】:

我现在有点没时间了,但还是忍不住给你一些指点。:

  1. 组装您的基本(非数据透视)查询。你应该在你的表之间使用几个LEFT JOIN。完成后,继续进行数据透视。
  2. 看看我在 Dynamic PIVOT 上写的东西:

【讨论】:

  • 感谢阿德里安 - 这让我走上了正轨。任何想法如何添加 case 语句以将 null 更改为 0 并将值更改为 1?
  • 是的:case when YourValue is null then 0 else 1 end
  • 对不起,我的意思是“在哪里”添加 case 语句。如果我将它添加到 select 语句中,它不会捕获空值。
猜你喜欢
  • 1970-01-01
  • 2014-12-13
  • 2015-12-05
  • 2012-06-17
  • 2012-05-11
相关资源
最近更新 更多