【发布时间】:2015-10-05 19:56:53
【问题描述】:
我发现了类似的问题,但没有任何解决方案能够为我解决问题。我一直没有练习并坚持这一点。
我有一个跟踪员工职位的表格。每个员工可以拥有任意数量的活动职位。我想将每个员工显示为一条记录,该记录中的所有职位跨越多个列。
查看数据显示没有超过 6 个在职职位的员工,由于这是一次性查询,我应该可以使用该数字。
所有职位都分配了一个序列号,但它们的顺序不是很方便 - 员工的非活动职位保留序列号。
所以现在我有一些看起来像这样的东西:
ID | Name | Title | Cat | Seq
------------------------------
10 | John | Asst. | HR | 13
10 | John | Tutor | EDU | 17
11 | Sue | Mgr | PA | 6
11 | Sue | Adj. | EDU | 7
11 | Sue | Tutor | EDU | 13
...
11 | Sue | Asst. | HR | 22
但我希望它看起来像这样:
ID | Name | Title 1 | Cat 1 | Title 2 | Cat 2 | Title 3...| Title 6 | Cat 6
----------------------------------------------------------------------------
10 | John | Asst. | HR | Tutor | EDU | NULL | NULL | NULL
11 | Sue | Mgr. | PA | Adj. | EDU | Tutor | Asst. | HR
让我知道我需要提供哪些额外信息。
【问题讨论】:
-
您可能最终会进入
PIVOTs 领域,在您尝试做的事情的背景下,它们可能有点难以使用,特别是如果您尝试生成动态列数。这种做法违背了 RDBMS 的原则,因为您正在对数据进行非规范化。 -
呃,我担心枢轴会是建议。 re: 非规范化,只是一次数据转储,所以在这种情况下它不是问题。
-
如果是一次性的,我建议添加一列
ROW_NUMBER() over (PARTITION BY ID ORDER BY Cat, Title),然后您可以将其用作 Excel 或其他电子表格程序中的索引来转置它们。
标签: sql-server multiple-columns