【发布时间】:2021-05-19 16:20:48
【问题描述】:
我有一个包含以下结果的表(来自 SQL 查询)
| ID | Type | Comment |
|---|---|---|
| 12345 | Manager Comment | This is a Manager comment |
| 12345 | HR Comment | This is a HR comment |
| 12345 | HR Comment | This is another HR comment |
| 54321 | Manager Comment | This is a Manager comment |
| 54321 | Manager Comment | This is another Manager comment |
| 54321 | Manager Comment | This is another Manager comment aswell |
我正在尝试让输出看起来像这样:
| ID | Manager Comment 1 | Manager Comment 2 | Manager Comment 3 | HR Comment 1 | HR Comment 2 |
|---|---|---|---|---|---|
| 12345 | This is a HR comment | This is a HR comment | This is another HR Comment | ||
| 54321 | This is a Manager comment | This is another Manager comment | This is another Manager comment aswell |
这个 cmets 的数量可以在 0 到 5 之间变化。
我尝试了以下方法,但它仅适用于每个部分中的最新 cmets:
SELECT *
FROM
(
SELECT
A.[SHIFTASSIGNID] as 'ID'
,c.[COMMENTTEXT] as 'Comment Type'
,b.COMNTNOTETXT as 'Comment'
FROM [tkcsdb].[dbo].[SHFTASGNCOMNTMM] A
join [tkcsdb].[dbo].[COMNTNOTEDTL] B on
a.[COMNTNOTEID] = b.[COMNTNOTEID]
join [tkcsdb].[dbo].[COMMENTS] C
on c.commentID = a.commentID
where A.SHIFTASSIGNID = 7354246
) AS SourceTable PIVOT(max([Comment]) FOR [Type] IN([HR Notes],[Manager Notes], [Kommentar])) AS PivotTable;
显然它不能容纳多人 cmets,我已经花了大约 3 个小时在这方面,所以任何帮助将不胜感激。
谢谢 克里斯
【问题讨论】:
-
标记你的数据库
-
我认为您必须创建一个 row_number 列,然后将 rownumber 连接到评论类型字段。如果 cmets 的数量是动态的,那么您将需要一个动态枢轴。我实际上只是回答了一个问题。 stackoverflow.com/questions/67580698/…
-
你为什么要这样做? (如果 cmets 的数量是可变的,那么最适合在 SQL 中使用的结构就是您已经拥有的结构。如果您要旋转数据以向人类展示,请在您的展示层/应用程序中执行此操作,不要' t 用 SQL 来做。这是一种 SQL 反模式/代码气味。)
标签: sql