Avatar billede i910ativ Nybegynder
21. februar 2008 - 09:44 Der er 4 kommentarer og
2 løsninger

forskellig where-klausul på hver selektion?

Ja, dårlig titel, sorry ... kan bedst forklares med denne pseudo-SQL:

SELECT  count(colA) where colD IN ( 111,122,133) AS Antal1, 
count(colA) where colD IN (211, 222) AS Antal2,
Antal1+Antal2 AS total
FROM  tbl

Kan man lave et SQL statement, som gør dette?
Avatar billede fennec Nybegynder
21. februar 2008 - 09:56 #1
Det kan du godt med inner select

Select
  (select count(colA) from tbl where colD IN ( 111,122,133)) AS Antal1,
  (select count(colA) from tbl where colD IN (211, 222)) AS Antal2

Jeg kan dog ikke få den til at lægge de to tal sammen bagefter uden at skulle skrive det en gang til:

Select
  (select count(colA) from tbl where colD IN ( 111,122,133)) AS Antal1,
  (select count(colA) from tbl where colD IN (211, 222)) AS Antal2,
  (select count(colA) from tbl where colD IN ( 111,122,133)) + (select count(colA) from tbl where colD IN (211, 222)) AS Antal3

Men så er vi nok ude i noget hastighed/performance problemer. Jeg ville derfor lægge de 2 tal sammen i mit program i stedet.
Avatar billede powerpunk Nybegynder
21. februar 2008 - 11:10 #2
Hvis den sidste sum skal laves i SQL udtrækket kunne det gøres som:

SELECT count(t2.colA) AS Antal1, count(t3.colA) AS Antal2, count(t1.colA) as Antal3 from tbl t1
left join tbl t2 on t1.ColA = t2.ColA and t1.colD in (111,122,133)
left join tbl t3 on t1.ColA = t3.ColA and t3.colD in (211, 222)
where t1.colD in (111,122,133,211, 222)
Avatar billede i910ativ Nybegynder
21. februar 2008 - 11:49 #3
ahh, kan godt se principperne i begge beskrevne metoder - begge vil "come in handy" fremover også, thanx. Smid et svar hver, så forhøjer jeg pointsne, så der er 15 til jer hver
Avatar billede fennec Nybegynder
21. februar 2008 - 11:50 #4
.o) <-- One Eyed Jack
Avatar billede powerpunk Nybegynder
21. februar 2008 - 12:54 #5
...
Avatar billede teepee Nybegynder
21. februar 2008 - 14:32 #6
hvis det skal udbygges yderligere så bør du benytte en case statement i stedet:

select sum(case when colD IN (111,122,133) then 1 else 0 end) as Antal1,
      sum(case when colD IN (211,222) then 1 else 0 end) as Antal2,
      sum(case when colD IN (111,122,133,211,222) then 1 else 0 end) as Antal3
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester