Har ett himla mystiskt problem med nästlade select.
Mitt mål är att få en tabell som ser ut så här:
Ort | Företag1 | Företag 2 | Företag 3 osv...
Uppsala | 1 | 2 | 1 osv...
Örebro | 2 | 0 | 1 osv...
Det löste jag med en nästlad select-sats som ser ut så här:
select distinct ort,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag1') AS Foretag1,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag LIKE '%Foretag2') AS [Foretag2],
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag3') AS Foretag3,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag4') AS Foretag4,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag5') AS Foretag5,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag6') AS Foretag6,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag7') AS Foretag7,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag8') AS Foretag8
from tblForetag as ty WHERE Foretag NOT LIKE 'Foretag9%' AND Gren NOT LIKE 'Underforetag%'
Mitt andra mål är att bara visa de orter som gäller för de enskilda företagen så jag tex. kan välja att bara se hur många företag som ligger på samma ort som Företag1.
Detta löste jag så här:
select distinct ort,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag1') AS Foretag1,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag LIKE '%Foretag2') AS [Foretag2],
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag3') AS Foretag3,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag4') AS Foretag4,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag5') AS Foretag5,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag6') AS Foretag6,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag7') AS Foretag7,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag8') AS Foretag8
from tblForetag as ty WHERE Foretag NOT LIKE 'Foretag9%' AND Gren NOT LIKE 'Underforetag%' [B]AND Foretag = 'Foretag1'[/B]
Detta funkade jättebra med både företag1 (AND Foretag = 'Foretag1' ) och Företag2 (AND Foretag LIKE '%Foretag2') men när jag väl kommer till företag3 så funkar det inte alls? Trots att det är nästan exakt samma kod och att det funkade i det första exemplet?
Skriver jag så här så funkar det:
SELECT * From tblForetag WHERE Foretag = 'Foretag3'
Men skriver jag så här så funkar det inte:
SELECT distinct ort,
(select count(*) from tblForetag as ti where ty.ort = ti.ort and ti.Foretag = 'Foretag3') AS Foretag3
FROM tblForetag as ty WHERE Foretag NOT LIKE 'Foretag9%' AND Gren NOT LIKE 'Underforetag%' AND Foretag = 'Foretag3'
Det känns ju som det måste vara knas med datat i databasen men jag kan inte hitta vad eller hur jag ska lösa det? Hoppas verkligen att någon kan hjälpa mig. Jag håller på att bli tokig.
Ok, med "funkar inte" menar jag att satsen inte returnerar något resultat.
I mitt första exempel så funkar koden och satsen returnerar då alla orter och alla företag. Tabellen som returneras ser då ut nått sånt här:
Ort | Företag1 | Företag 2 | Företag 3 osv...
Uppsala | 1 | 2 | 1 osv...
Älmhult | 0 | 3 | 4 osv...
Örebro | 2 | 0 | 1 osv...
Det jag sen vill är att bara visa de orter där företag1 finns. Jag lägger då till satsen AND Foretag = 'Företag1' (se kodexempel 2). Det funkar också. Då blir resultatet:
Ort | Företag1 | Företag 2 | Företag 3 osv...
Uppsala | 1 | 2 | 1 osv...
Örebro | 2 | 0 | 1 osv...
Dvs. den exkluderar alla orter där det inte finns något företag1. Gör jag likadant fast med företag2 så funkar det också och resultatet blir så här:
Ort | Företag1 | Företag 2 | Företag 3 osv...
Uppsala | 1 | 2 | 1 osv...
Älmhult | 0 | 3 | 4 osv...
Mitt problem är att när jag försöker göra så med Företag3 så funkar det inte!? Och inte heller med de andra 8 efterföljande företagen i databasen? :/
Gör jag som i kodexempel 3 så returnerar det alla Företag3 men gör jag som i kodexempel 4 så returneras inget alls?
Jag fattar ingenting och jag har ingen aning om hur jag ska lösa det?
Då har väl alla företag av tyg företag3 .. företag8 värdet Underföretag i kolumnen gren.
Det verkar som du är något på spåret! När jag inkluderar AND (Gren NOT LIKE 'Underforetag%') i den vanliga select-satsen så returnerar den ingenting. :/
Typ så här:
SELECT *
FROM tblForetag
WHERE Gren NOT LIKE 'Underforetag%'
AND Foretag = 'Foretag3'
Men innehållet i fälten i kolumnen Gren är ju Null? Och tar jag bort Not så returnerar den också ingenting. Typ:
SELECT *
FROM tblForetag
WHERE Gren LIKE 'Underforetag%'
AND Foretag = 'Foretag3'
Hur löser jag det då? Jag vill ju fortfarande exkludera alla dom med underföretag?
Jag kan bara tacka och bocka för att du hjälpt mig lösa ett problem som nnästan gjort mig gråhårig. Jag skulle aldrig kunnat lista ut själv att LIKE skulle exkludera alla som var Null.
Tackar återigen.
391 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91