このタイプの変換は、ピボットとして知られています。あなたが使用しているデータベースを指定しませんでしたが、あなたはどのようなシステムで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
あなたはPIVOT
両方へのアクセス権を持っている場合は、データベースによってはSQL Fiddle with Demo
を参照してください。およびUNPIVOT
関数を使用すると、それらを使用して結果を得ることができます。 UNPIVOT
関数は、IndividualPay
とFamilyPay
の列を行に変換します。それが完了したら、あなたはPIVOT
機能を持つ4つの新しい列を作成することができます。
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 |
をはい、あなたはピボットクエリをしたいが、構文は、データベースシステムによって異なります。あなたはどちらを使っていますか? – Alkini