Proste obliczenia funkcją count i zmiana wyglądu tabeli

Proste obliczenia funkcją count i zmiana wyglądu tabeli
  • Rejestracja: dni
  • Ostatnio: dni
0

Cześć,
mam problem ze zmianą wyglądu tabeli po prostych obliczeniach...

Dane:

id ZmiennaA ZmiennaB
1 TAK TAK
2 NIE NULL
3 TAK NULL

chce policzyć takie przypadki jak ZmiennaA = 'NIE', ZmiennaA = 'TAK' i trzeci przypadek ZmiennaA = 'TAK' and ZmiennaA = 'TAK'.
Wykonuję taki kod...

Kopiuj
  select COUNT (ZmiennaA) as LiczbaP
  from Table_1
  where ZmiennaA = 'NIE'
  union all
  select COUNT (ZmiennaA)
  from Table_1
  where ZmiennaA = 'TAK'
  union all
  select COUNT (ZmiennaA) 
  from Table_1
  where ZmiennaA = 'TAK' and ZmiennaB = 'TAK'
Kopiuj

a wynik jaki dostaję to :

LiczbaP
1
2
1

Teraz chciałbym obrócić tabelę, aby wyglądała następująco:

'ZmiennaA=NIE' 'ZmiennaA=TAK' 'ZmiennaA&ZmiennaB=TAK'
1 2 1

Niestety po kombinacjach z pivotem mi się to nieudało, dlatego proszę o pomoc.

woolfik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1611
0
Kopiuj
select * from 
(select ROW_NUMBER() over(order by s.colID) as ID, s.* from 
(select 3 colID, 'zmiennaA' colName
union all
select 2 colID, 'zmiennaB' colName
union all
select 5 colID, 'zmiennaA&B' colName) s) p
pivot
( 
	sum(p.colID) for p.colName in ([zmiennaA],[zmiennaB],[zmiennaA&B])
) as SumPerColName

lub tak jeśli chcesz mieć w jednym rekordzie:

Kopiuj
select * from 
(select 3 colID, 'zmiennaA' colName
union all
select 2 colID, 'zmiennaB' colName
union all
select 5 colID, 'zmiennaA&B' colName) p
pivot
( 
	sum(p.colID) for p.colName in ([zmiennaA],[zmiennaB],[zmiennaA&B])
) as SumPerColName

oczywiście za select z unionami podstawiasz swoje zapytanie reszta powinna banglać

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
3

nie prościej zrobić tak zamiast się bawić pivotami

Kopiuj
select 
(SELECT COUNT (ZmiennaA) FROM Table_1 WHERE ZmiennaA = 'NIE') nie,
(SELECT COUNT (ZmiennaA) FROM Table_1 WHERE ZmiennaA = 'TAK') tak,
(SELECT COUNT (ZmiennaA) FROM Table_1 WHERE ZmiennaA = 'TAK' AND ZmiennaB = 'TAK') tak_tak

A tak w ogóle to zamiast robić 3 zapytania można jednym

Kopiuj
select 
  sum(case when ZmiennaA = 'NIE' then 1 else 0 end) nie,
  sum(case when ZmiennaA = 'TAK' then 1 else 0 end) tak,
  sum(case when ZmiennaA = 'TAK' AND ZmiennaB = 'TAK' then 1 else 0 end) tak_tak
from
  Table_1
K0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
0

wielkie dzięki za pomoc!

abrakadaber, prosty sposób a jakoś mi to do głowy nie wpadło - dzięki :)

PS. założyłem sobie konto i będę tu częściej zaglądał :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.