简体   繁体   English

在SQL中旋转两列

[英]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 我在创建数据透视表时遇到问题,但首先这是我所有带有集合的数据结构: https : //pastebin.com/LiLHAMqs

And I have to create sql to get data in this format . 而且我必须创建sql才能以这种格式获取数据。

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 这是我的SQL查询

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";

You could use count over partition and indicate the name ( nazwa ) and the genre ( plec ), like this: 您可以使用count over partition并指出名称( nazwa )和体裁( plec ),如下所示:

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";

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM