2015-09-09 69 views
0

我的表看起来像这样SQL数据透视行到列?

enter image description here

我想行转动到表头。

如果我使用:

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 

enter image description here

这是几乎我想要什么

,但有没有办法在枢轴不要用MAX?当我使用MAX ??时,我将丢失DIVSION 010和COMPANY 1的DOMAIN \ USER1。

任何人都可以帮我吗?

**** UPDATE *************

我错过了一个专栏中,我需要的,因为我会用更多的行结束(因为你一说) 。

enter image description here

+0

的Microsoft SQL Server 2012 – Nils

+0

你能否澄清你想要的输出给ÿ我们的样本数据? – jpw

+1

你真的需要更加详细地描述你在这里做什么,目前它不明确和/或似乎你的模型可能不完整。具体来说,User1的结果应该是什么?用户1可以看到***和***的四个组合; '023,1'和'023,2'和'010,1'和'010,2'。所有恰好都有'管理'权限,但是如果一行或多行在'权限'中具有不同的值,则不会指示如何执行。 – MatBailie

回答

1

的问题是,枢需要一些方式来连接师和公司数据。 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为在同一行的列