在SQL中旋转两列

在SQL中旋转两列,sql,oracle,Sql,Oracle,我在创建pivot时遇到问题,但首先,这里是我所有的数据结构和集合: 我必须创建sql来获取其中的数据 我必须用枢轴 我在计算每组有多少只同性猫时遇到了问题 这是我的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(MILUSI

我在创建pivot时遇到问题,但首先,这里是我所有的数据结构和集合:

我必须创建sql来获取其中的数据

我必须用枢轴

我在计算每组有多少只同性猫时遇到了问题

这是我的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";

您可以使用
countoverpartition
并指示名称(
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";

如果还提供CREATETABLE语句,那么插入将更有帮助。(请编辑您的帖子,将其添加到顶部。)@mathguy edited您似乎缺少FUNKCJE表和数据。这似乎对你的问题很重要;如果我没有弄错的话,数据透视表的列对应于不同的“funkcja”值。重要问题:是否所有的“funkcja”值都提前知道,而不先检查“缺失表”?如果不是,那么您要求的是动态数据透视,这通常是一个不好的做法,可能需要您没有的技能。@mathguy我添加了我的所有数据库结构(所有创建表和所有插入),我认为它不是动态数据透视