Kolumna zliczająca wyrazy

0

Dzień dobry,
Mam kolumny
Marka produktu oraz wynik.

gdzie kolumna Wynik wyswietla mi
kodu

MAX( CASE Czynnosc_TwrNazwa
WHEN 'Analiza problemu/ekspertyza' THEN 'ZWROT'
WHEN 'Wymiana urządzenia na nowe' THEN 'WYMIANA'
WHEN 'Wystawienie korekty do fakt. sprzedaży z powodu niemożliwości naprawy' THEN 'KOREKTA'
WHEN 'Ważne informacje' THEN 'INFO'
WHEN 'Anulowanie zgłoszenia' THEN ',Nie dotarło do serwisu'
WHEN 'Naprawa duplikatora' THEN 'Naprawa/Zwrot' ELSE 'Inne' END) AS 'wynik'

Chciałbym uzyskać dodatkową kolumnę posortowaną wg marki oraz ilość powtórzeń (wynik) ale tylko która się tyczy przy tej marce. tak jak na obrazie title https://zapodaj.net/1960aec3f1645.jpg.html

Myslalem o
COUNT('wynik') ale wyskakuje mi błąd, ale to tez zle by było bo całą kolumnę by zliczyło a nie tylko do wyniku dla danej marki.

0

Bazując na Twoim opisie (sam nie jestem pewien czy zrozumiałem przedstawiony problem):

select 
  marka,
  max(wynik),
  max(czestosc)
from (
  select 
    marka,
    case 
     ...
    end as wynik 
    count(0) over (partition by marka, Czynnosc_TwrNazwa)  czestosc
  from tabelka) 
group by 
  marka;

Logika mniej więcej taka:

  1. Podzapytanie:
  • Wybieramy marke i mapujemy Czynnosc_TwrNazwa na wynik
  • Zliczamy za pomocą funkcji analitycznej count ilość rekordów dla marki i wyniku - tu zakładam, że opisy z Czynnosc_TwrNazwa mapują się 1:1 na Wynik
  1. Wynik podzapytania grupujemy po marce i agregujemy maxem

Nie napisałeś czy Twój silnik bazodanowy wspiera funkcje analityczne, więc założyłem, że nie jest to jakaś bieda-baza i wspiera ;-)

1

Je to widzę tak:

select
     marka,
     wynik,
     count(*)  ile
from (select
               marka
              ,case (…) end wynik
         from
               tab) dt
group by
      marka
     ,wynik
1

A ja tak:

select
               marka
              ,case (…) end wynik
              ,count(*) as ilosc
from
               tab
group by 1,2

1 użytkowników online, w tym zalogowanych: 0, gości: 1