SQL 将行转为列?
SQL Pivot row to column?
我的table看起来像这样
我想将行旋转成 table 个头。
如果我使用:
SELECT [USER],[DIVISION], [COMPANY],[RIGHTS] FROM
(SELECT [USER],[ATTRIBUTE],[VALUE],[RIGHTS] FROM [AGDA_MANUAL].[dbo].[TEST] WHERE [PROC] = 'FINANCE' ) AS T1
PIVOT (MAX([VALUE]) FOR [ATTRIBUTE] IN ([DIVISION],[COMPANY])) AS T2
这就是几乎我想要的
但是有没有办法在枢轴中不使用 MAX?当我使用 MAX 时,我失去了 DIVSION 010 和 COMPANY 1 for DOMAIN\USER1 ??.
有人可以帮我吗?
****更新*************
我缺少一列我需要的,因为我最终会得到更多行(正如你们其中一位所说)。
问题是 pivot 需要某种方式来连接 DIVISION 和 COMPANY 数据。
MAX 允许它这样做——否则它怎么知道哪个公司与哪个 DIVISION 相关联。
一种解决方案是添加一个人工列(通过 RowNumber()
生成),您将添加到分组中(连同 PROC 和 USER)
您仍然需要决定 DIV 023 属于 COMP 1,2 还是 3
你可能会得到类似
的结果
FINANCE | DOMAIN\USER1 | 1 | DIVISION | 023
FINANCE | DOMAIN\USER1 | 2 | DIVISION | 010
FINANCE | DOMAIN\USER1 | 1 | COMPANY | 1
FINANCE | DOMAIN\USER1 | 2 | COMPANY | 2
FINANCE | DOMAIN\USER2 | 1 | COMPANY | 3
现在您可以旋转并将公司和 DIVISION 作为同一行的列
我的table看起来像这样
我想将行旋转成 table 个头。
如果我使用:
SELECT [USER],[DIVISION], [COMPANY],[RIGHTS] FROM
(SELECT [USER],[ATTRIBUTE],[VALUE],[RIGHTS] FROM [AGDA_MANUAL].[dbo].[TEST] WHERE [PROC] = 'FINANCE' ) AS T1
PIVOT (MAX([VALUE]) FOR [ATTRIBUTE] IN ([DIVISION],[COMPANY])) AS T2
这就是几乎我想要的
但是有没有办法在枢轴中不使用 MAX?当我使用 MAX 时,我失去了 DIVSION 010 和 COMPANY 1 for DOMAIN\USER1 ??.
有人可以帮我吗?
****更新*************
我缺少一列我需要的,因为我最终会得到更多行(正如你们其中一位所说)。
问题是 pivot 需要某种方式来连接 DIVISION 和 COMPANY 数据。
MAX 允许它这样做——否则它怎么知道哪个公司与哪个 DIVISION 相关联。
一种解决方案是添加一个人工列(通过 RowNumber()
生成),您将添加到分组中(连同 PROC 和 USER)
您仍然需要决定 DIV 023 属于 COMP 1,2 还是 3
你可能会得到类似
的结果FINANCE | DOMAIN\USER1 | 1 | DIVISION | 023
FINANCE | DOMAIN\USER1 | 2 | DIVISION | 010
FINANCE | DOMAIN\USER1 | 1 | COMPANY | 1
FINANCE | DOMAIN\USER1 | 2 | COMPANY | 2
FINANCE | DOMAIN\USER2 | 1 | COMPANY | 3
现在您可以旋转并将公司和 DIVISION 作为同一行的列