sql - 如何在sql中将两行合并为一行?

标签 sql pivot

我有一张 table

EmployeeID    IndividualPay  FamilyPay   IsActive
    1            200          300        true
    1            100          150        false

但我希望输出如下(我想使用这个输出与其他一些表进行内部连接)
EmployeeID  IndPay_IsActive  IndPay_IsNotActive FamilyPay_IsActive   FamilyPay_IsNotActive 
    1            200                 100              300                   150

我查看了 PIVOT ,但不确定如何在我的情况下使用它。

最佳答案

这种类型的转换称为枢轴。您没有指定正在使用的数据库,但您可以使用带有 CASE 的聚合函数。在任何系统中的表达式:

select employeeid,
  max(case when IsActive = 'true' then IndividualPay end) IndPay_IsActive,
  max(case when IsActive = 'false' then IndividualPay end) IndPay_IsNotActive,
  max(case when IsActive = 'true' then FamilyPay end) FamilyPay_IsActive,
  max(case when IsActive = 'false' then FamilyPay end) FamilyPay_IsNotActive
from yourtable
group by employeeid

SQL Fiddle with Demo

根据您的数据库,如果您有权访问 PIVOTUNPIVOT函数,然后它们可以用来得到结果。 UNPIVOT函数转换 IndividualPayFamilyPay列成行。完成后,您可以使用 PIVOT 创建四个新列。功能:
select *
from
(
  select employeeid,
    case when isactive = 'true'
      then col+'_IsActive'
      else col+'_IsNotActive' end col, 
    value
  from yourtable
  unpivot
  (
    value
    for col in (IndividualPay, FamilyPay)
  ) unpiv
) src
pivot
(
  max(value)
  for col in (IndividualPay_IsActive, IndividualPay_IsNotActive,
              FamilyPay_IsActive, FamilyPay_IsNotActive)
) piv

SQL Fiddle with Demo .

两者都给出相同的结果:
| EMPLOYEEID | INDIVIDUALPAY_ISACTIVE | INDIVIDUALPAY_ISNOTACTIVE | FAMILYPAY_ISACTIVE | FAMILYPAY_ISNOTACTIVE |
----------------------------------------------------------------------------------------------------------------
|          1 |                    200 |                       100 |                300 |                   150 |

关于sql - 如何在sql中将两行合并为一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15411239/

相关文章:

SQL查询对所有表中的列进行计数

sql - 在具有匹配键的 SQL 中从更新

sql - 从临时表插入表需要很长时间

mysql - 需要查找购买的每种产品的销售地点数量吗?

mysql - 加载数据到文件 str_to_date 转换

php - 选择在 wp_usermeta 表中的多行上具有合格数据的用户

sql-server - SQL Pivot 查询从 VIEW 表中提取数据

sql - 将行转换为列 SQL Server

SQL Server 删除并重新创建表的索引

mysql - 在 SQL 中根据日期组织数据