sql - 将行转置为列并连接表

标签 sql sql-server sql-server-2008 pivot

嗨,我有两个表属性,实例

属性表

id  |    key_info   |   value_info
2   |     amount    |    1009
2   |   currency    |     USD
2   |     Level     |    Level 5
3   |    amount     |     2017 
3   |   currency    |     CAD

实例表
id   |  status
2    | Pending 
3    | Approved

我想像这样连接两个表-

新表
id | amount |  currrency | level   | status
2  |  1001  |     USD    | Level 5 | Pending
3  |   2017 |     CAD    |         | Approved

Attribute 和 Instance 中的所有字段都是可选的,除了 id。

最佳答案

select
  a.id,
  max(case when a.key_info = 'amount' then a.value_info end) as amount,
  max(case when a.key_info = 'currency' then a.value_info end) as currency,
  max(case when a.key_info = 'level' then a.value_info end) as level,
  i.status
from
  attribute a
  join instance i on a.id = i.id
group by
  a.id,
  i.status

Sql Fiddle

关于sql - 将行转置为列并连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15234212/

相关文章:

sql-server - 删除记录时,索引种子仍然很高

SQL 替换字符串中的所有字符

java - 无法从 Java 应用程序打开 orientdb 数据库

sql - 使用 CTE 的结果在没有游标的情况下从表中查询

sql-server - SQL Server 2012 - 创建数据库权限在数据库主机中被拒绝(错误 262)

sql-server-2008 - 如何忽略 SQL Server 2008 R2 中的 "Invalid column name"错误

sql-server-2008 - tsql DATEDIFF 在几分钟内调用而不舍入秒数

MySQL 通过变量设置整理

python - sqlalchemy 中的 Haversine 公式

mysql - 如何组合两个具有来自不同表和多个列的计数的查询