Bu tür bir dönüşüm, pivot pivot olarak bilinir. Sen kullandığınız ne veritabanı belirtmedi ancak herhangi sistemde bir CASE
ifade ile bir toplama işlevi kullanabilirsiniz: Her iki PIVOT
erişiminiz varsa
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
, veritabanınızda bağlı SQL Fiddle with Demo
Bkz ve UNPIVOT
işlevleri, daha sonra sonuçları elde etmek için kullanılabilir. UNPIVOT
fonksiyon satırlara IndividualPay
ve FamilyPay
sütunları dönüştürür. Bu işlem tamamlandıktan sonra, o zaman PIVOT
fonksiyonu ile dört yeni sütunlar oluşturabilirsiniz:
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 bakınız.
| EMPLOYEEID | INDIVIDUALPAY_ISACTIVE | INDIVIDUALPAY_ISNOTACTIVE | FAMILYPAY_ISACTIVE | FAMILYPAY_ISNOTACTIVE |
----------------------------------------------------------------------------------------------------------------
| 1 | 200 | 100 | 300 | 150 |
Evet, pivot sorgusu istiyorum ama sözdizimi veritabanı sistemi tarafından değişir:
İkisi
aynı sonucu verir. Hangisini kullanıyorsun? – Alkini