【问题标题】:How to pivot data in SQL without using Pivot command如何在不使用 Pivot 命令的情况下在 SQL 中透视数据
【发布时间】:2018-04-16 16:59:30
【问题描述】:

我当前表格的示例:

ID 类型

1 个

1 乙

2 个

2 乙

2C

期望的输出:

身份证一二三

1 A B

2 A B C

基本上,我想将 Type 列中的值转换为新列(一、二、三等),并将 type 中的值放在这些列中。每个 ID 将只有一行而不是多行。

由于 perm 限制,我无法在 SQL 中使用 PIVOT 语句,但是我可以在 SQL 或 Excel 中创建它吗?

【问题讨论】:

  • 您没有PIVOT的使用权限,但是可以查询数据吗?
  • 然后在excel中使用数据透视表
  • 还有,你用的是sql server吗?

标签: sql excel pivot


【解决方案1】:

你可以这样做:

select id, max(case when type='a' then type else null end) one,   max(case when type='b' then type else null end) two,
max(case when type='c' then type else null end) three
from #temp1
group by id

【讨论】:

    【解决方案2】:

    这是我见过的常见方式:

    SELECT DISTINCT t.ID,
        a.Type AS "One",
        b.Type AS "Two",
        c.Type AS "Three"
    FROM Table t
    LEFT JOIN Table a
        ON  a.ID   = t.ID
        AND a.Type = 'A'
    LEFT JOIN Table b
        ON  b.ID   = t.ID
        AND b.Type = 'B'
    LEFT JOIN Table c
        ON  c.ID   = t.ID
        AND c.Type = 'C'
    

    与 PIVOT 相比,它的效率非常低。与使用@DanielMarcus 提供的MAX() 方法相比,此方法的唯一优点是即使列的数据类型不支持聚合,此方法也有效,但聚合方法的性能可能更好。

    也就是说,如果您有 SELECT 权限,那么我不明白您为什么没有 PIVOT 权限。唯一的问题可能是您使用的数据库的兼容性级别未设置为 90 (SQL Server 2005) 或更高,我认为这是必需的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 2013-01-11
      • 2018-06-27
      相关资源
      最近更新 更多