Michał Urban
Michał Urban

Reputation: 53

Pivoting two columns in SQL

I have problem with creating pivot, but firstly here are all my data structure with sets: https://pastebin.com/LiLHAMqs

And I have to create sql to get data in this format.

I have to use pivot.

I have problem with counting how many cats of one sex is in every group.

Here is my SQL query

SELECT  "Banda","Plec", NVL(SZEFUNIO,0) as SZEFUNIO, NVL(BANDZIOR,0) AS BANDZIOR, NVL(LOWCZY,0) AS LOWCZY, NVL(LAPACZ,0) AS LAPACZ, NVL(KOT,0) AS KOT, NVL(MILUSIA,0) AS MILUSIA, NVL(DZIELCZY,0) AS DZIELCZY,
(NVL(SZEFUNIO,0) + NVL(BANDZIOR,0) + NVL(LOWCZY,0) + NVL(LAPACZ,0) + NVL(KOT,0) + NVL(MILUSIA,0) + NVL(DZIELCZY,0)) as Suma
FROM   (SELECT b.nazwa "Banda", funkcja "Funkcja", plec "Plec", przydzial_myszy "przydzial", NVL(myszy_extra,0) "myszy_extra"  FROM Kocury k 
join Bandy b on b.numer_bandy = k.nr_bandy
)
PIVOT
   (  sum("przydzial" + NVL("myszy_extra",0))
     for "Funkcja"
     in ('SZEFUNIO' as SZEFUNIO, 'BANDZIOR' AS BANDZIOR, 'LOWCZY' AS LOWCZY, 'LAPACZ' AS LAPACZ, 'KOT' AS KOT, 'MILUSIA' AS MILUSIA, 'DZIELCZY' AS DZIELCZY ))
     order by "Banda";

Upvotes: 0

Views: 76

Answers (1)

Diego Souza
Diego Souza

Reputation: 548

You could use count over partition and indicate the name (nazwa) and the genre (plec), like this:

SELECT "Banda",
       "Plec",
       "Ile",
       NVL(SZEFUNIO, 0) as SZEFUNIO,
       NVL(BANDZIOR, 0) AS BANDZIOR,
       NVL(LOWCZY, 0) AS LOWCZY,
       NVL(LAPACZ, 0) AS LAPACZ,
       NVL(KOT, 0) AS KOT,
       NVL(MILUSIA, 0) AS MILUSIA,
       NVL(DZIELCZY, 0) AS DZIELCZY,
       (NVL(SZEFUNIO, 0) + NVL(BANDZIOR, 0) + NVL(LOWCZY, 0) +
       NVL(LAPACZ, 0) + NVL(KOT, 0) + NVL(MILUSIA, 0) + NVL(DZIELCZY, 0)) as Suma
  FROM (SELECT b.nazwa "Banda",
               count(*) over (partition by b.nazwa, k.plec) as "Ile",
               funkcja "Funkcja",
               plec "Plec",
               przydzial_myszy "przydzial",
               NVL(myszy_extra, 0) "myszy_extra"
          FROM Kocury k
          join Bandy b
            on b.numer_bandy = k.nr_bandy)
PIVOT(sum("przydzial" + NVL("myszy_extra", 0))
   for "Funkcja" in('SZEFUNIO' as SZEFUNIO,
                    'BANDZIOR' AS BANDZIOR,
                    'LOWCZY' AS LOWCZY,
                    'LAPACZ' AS LAPACZ,
                    'KOT' AS KOT,
                    'MILUSIA' AS MILUSIA,
                    'DZIELCZY' AS DZIELCZY))
 order by "Banda", "Ile";

Upvotes: 1

Related Questions