这种转换称为 枢轴 。您没有指定要使用的数据库,但是可以
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_IsNotActivefrom yourtablegroup by employeeid
参见带有演示的SQL Fiddle
根据您的数据库,如果您可以同时访问
PIVOT和
UNPIVOT函数,则可以使用它们来获取结果。该
UNPIVOT函数将
IndividualPay和
FamilyPay列转换为行。完成后,您可以使用
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) srcpivot( max(value) for col in (IndividualPay_IsActive, IndividualPay_IsNotActive, FamilyPay_IsActive, FamilyPay_IsNotActive)) piv
请参阅带有演示的SQL Fiddle。
两者给出相同的结果:
| EMPLOYEEID | INDIVIDUALPAY_ISACTIVE | INDIVIDUALPAY_ISNOTACTIVE | FAMILYPAY_ISACTIVE | FAMILYPAY_ISNOTACTIVE |----------------------------------------------------------------------------------------------------------------| 1 | 200 | 100 | 300 | 150 |
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)