【问题标题】:SQL Pivot row to column?SQL Pivot 行到列?
【发布时间】:2015-09-09 08:21:05
【问题描述】:

我的桌子是这样的

我想将这些行转为表头。

如果我使用:

 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 时,我失去了 DOMAIN\USER1 的 DIVSION 010 和 COMPANY 1 ??。

谁能帮帮我?

****更新*************

我错过了我需要的一列,因为我最终会得到更多行(正如你们中的一个所说)。

【问题讨论】:

  • 微软 SQL Server 2012
  • 您能否根据您的示例数据阐明您想要什么输出?
  • 您确实需要更详细地了解您在这里尝试做什么,目前它既模棱两可和/或看起来您的模型可能不完整。具体来说,User1 的结果应该是什么?我可以看到 User1 的 四个 部门和公司组合; 023, 1023, 2010, 1010, 2。所有人都碰巧拥有admin 权限,但是如果rights 中的一行或多行具有不同的值,您没有给出指示。

标签: sql tsql sql-server-2012 pivot


【解决方案1】:

问题在于,pivot 需要某种方式来连接 DIVISION 和 COMPANY 数据。 MAX 允许它这样做 - 否则它如何知道哪个 COMPANY 与哪个 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

现在您可以旋转并将 Company 和 DIVISION 作为同一行上的列

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    相关资源
    最近更新 更多