आपकी पहली गलती आसान लगती है। crosstab()
. के दूसरे पैरामीटर के अनुसार समारोह, 'Dubai'
पहले शहर के रूप में आना चाहिए (शहर के अनुसार क्रमबद्ध)। विवरण:
totalsales
. के लिए अनपेक्षित मान और totalamount
प्रत्येक name
. के लिए पहली पंक्ति से मानों का प्रतिनिधित्व करते हैं समूह। "अतिरिक्त" कॉलम को इस तरह माना जाता है। विवरण:
प्रति name
. के लिए राशि प्राप्त करने के लिए , अपने समग्र कार्यों पर विंडो फ़ंक्शन चलाएँ। विवरण:
select * from crosstab (
'select name
,sum(count(*)) OVER (PARTITION BY name)
,sum(sum(price)) OVER (PARTITION BY name)
,city
,count(city)
from products
group by name,city
order by name,city
'
-- ,'select distinct city from products order by 1' -- replaced
,$$SELECT unnest('{Dubai,London,Melborun
,Moscow,Munich,Shunghai}'::varchar[])$$
) AS tb (
name varchar(20), TotalSales bigint, TotalAmount bigint
,Dubai bigint
,London bigint
,Melborun bigint
,Moscow bigint
,Munich bigint
,Shunghai bigint
);
बेहतर अभी तक, दूसरे पैरामीटर के रूप में एक स्थिर सेट प्रदान करें। आउटपुट कॉलम हार्ड कोडेड हैं, डेटा कॉलम को गतिशील रूप से उत्पन्न करना अविश्वसनीय हो सकता है। यदि आप एक नए शहर के साथ एक और पंक्ति रखते हैं, तो यह टूट जाएगा।
इस तरह आप अपने कॉलम को अपनी पसंद के अनुसार भी ऑर्डर कर सकते हैं। बस आउटपुट कॉलम और दूसरे पैरामीटर को सिंक में रखें।