Proste obliczenia funkcją count i zmiana wyglądu tabeli

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...

  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'

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.

0
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:

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ć

3

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

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

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
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ł :)

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