webForumDet fria alternativet

Giltiga värden

1 svar · 278 visningar · startad av pulse

pulseMedlem sedan nov. 200373 inlägg
#1

Hej, har ett till problem som jag hoppas få hjälp med.

--tabell 1 innehåller giltiga värden för varje kategori

kategori	giltigt
10		2
10		3
15		X
15		4
16		X

--tabell 2 är populationen och ser ut såhär

kategori	värde
10		2 --giltigt
10		5 --ogiltigt
15		X --X
15		4 --giltigt
15		5 --ogiltigt
44		4 --ogiltigt (både kategorin och värdet)

Jag vill söka igenom populationen och kontrollera om värdet jag får är giltigt i den kategorin. Är det så vill jag få ett resultat som ser ut såhär

Kategori	1 - 9	X	Ogiltiga
10		1	0	1
15		1	1	1
Ogiltig		0	0	1 --44 hamnar här och alla andra som vars kategori inte stämmer med tabell1

Nån som kan hjälpa?

pulseMedlem sedan nov. 200373 inlägg
#2

Har kommit så långt att den räknar ut 1 - 9 och X rätt. Men när jag försöker räkna ut "Ogiltiga" värden blir det fel.

select g.cat,
sum(case when g.val = t.val and g.val not in ('X', 'x') then 1 else null end) as '1 - 9',
sum(case when g.val = t.val and g.val not in ('1', '2', '3', '4', '5', '6', '7', '8', '9') then 1 else null end) as 'X',
sum(case when g.val != t.val then 1 else null end) as 'Ogiltig'
from grupp g join t1 t on g.cat = t.cat
group by g.cat

Mina testtabeller ser ut såhär:

Tabell1 (giltiga värden)

cat	val
1	1
1	2

Tabell2 (population)

cat	val
1	1
1	a

Kör jag detta får jag

cat	1-9	X	Ogiltig
1	1	null	3

Alltså 3 på ogiltig när det borde varit 1. Jag tror att felet beror på att "join" jämför mina värden flera gånger mot alla ogiltiga värden i tabell1 men hur får man bort det?

128 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)