SQL 查询转置数据

标签 sql sql-server

我在 SQL Server 2008 中有下表:

ID  Type    Value
6   A_Left  A
6   B_Left  B
6   C_Left  C
6   D_Left  D
6   E_Left  E
6   A_Right A
6   B_Right B
6   C_Right C
6   D_Right D
6   E_Right E

我需要根据“值”列对它们进行分组,例如:

ID  Type    Type    Value
6   A_Left  A_Right A
6   B_Left  B_Right B
6   C_Left  C_Right C
6   D_Left  D_Right D
6   E_Left  E_Right E

这可能吗?我没有得到谷歌关于这种转置的确切术语。

最佳答案

使用INNER JOIN,将表与自身连接起来。在连接的一侧,限制为那些匹配 _Left 的内容,在另一侧,限制为那些匹配 _Right 的内容。

SELECT
  l.ID,
  l.Type AS L_Type,
  r.Type AS R_Type,
  l.Value
FROM
  t l
  INNER JOIN t r ON l.ID = r.ID AND l.Value = r.Value
WHERE
  RIGHT(l.type, 4) = 'Left'
  AND RIGHT(r.type, 5) = 'Right'

这是一个演示:http://sqlfiddle.com/#!6/f6590/4

或者,您可以使用 LIKE 而不是 RIGHT() 字符串函数:

SELECT
  l.ID,
  l.Type AS L_Type,
  r.Type AS R_Type,
  l.Value
FROM
  t l
  INNER JOIN t r ON l.ID = r.ID AND l.Value = r.Value
WHERE
  l.type LIKE '%_Left'
  AND r.type LIKE '%_Right'

http://sqlfiddle.com/#!6/f6590/5

关于SQL 查询转置数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21618114/

相关文章:

sql - 更改要计算的列 SQL SERVER

sqlite查询对子查询的结果进行简单的计算

mysql - 我们可以为 mysql 和某些特定数据库保留相同的密码吗?

sql - 每个匹配项仅显示第一行

sql-server - SQL Server 复制订阅者过滤器

sql - 在单个文本中将 SQL 表行与条件连接起来

sql-server - 如果我可以 ping 我的数据库服务器,我的 SQL Server 连接是否可以保证正常工作?

sql-server - 将表达式转换为数据类型日期时间时出现算术溢出错误。 (同时显示日期时间..)

SQL - 调查数据,循环调查问题的表模式设计

sql-server - SQL Server 导入和导出向导