webForumDet fria alternativet

group by (fast inte på null)

1 svar · 332 visningar · startad av employeeBean

employeeBeanMedlem sedan dec. 20082 inlägg
#1

Kanske någon av er vet hur jag ska skriva om den här frågan för att få önskat resultat?

Det jag vill få ut är alla Partys och deras children (om de har några).
Relationen Parent-Child ligger i tabellen PartyContainment. PartyName/ChildName ligger i tabellen Party och ska joinas in.

Det ska alltså se ut typ såhär:

GLN | PartyName | ChildGLN | ChildName
1 | child#1 | NULL | NULL
2 | child#2 | NULL | NULL
3 | parent#1 | 1 | child#1
3 | parent#1 | 2 | child#2
osv...

Problemet är att jag vill gruppera via ChildGLN men NULL värden i ChildGLN ska inte grupperas för då får jag inte med alla Partys som har NULL som child. Hur åstadkommer jag det på bästa sätt?

SELECT 
   max(GLN) as GLN
   ,max(PartyName) as PartyName
   ,ChildGLN
   ,max(ChildName) as ChildName
FROM (
SELECT DISTINCT
    GLN
    ,PartyName
    ,ChildGLN
    ,NULL as ChildName
FROM
    Party p
    left outer join PartyContainment pc
    on (p.GLN = pc.ParentGLN)

UNION ALL

SELECT
   null as GLN
   ,null as PartyName
   ,ChildGLN
   ,PartyName as ChildName
FROM
   Party p
   join PartyContainment pc
   on (p.GLN = pc.ChildGLN)
) as Union
GROUP BY ChildGLN ORDER BY ChildGLN
employeeBeanMedlem sedan dec. 20082 inlägg
#2

34 klick och ingen som har något tips?

Jag tror jag löst det själv:

SELECT
	GLN
	,PartyName
	,ChildGLN
	,ChildName
FROM 
	Party pa
	left outer join
	(SELECT
		ParentGLN
		,GLN as ChildGLN
		,PartyName as ChildName
	FROM
		Party p
		join PartyContainment pc
		on (p.GLN = pc.ChildGLN)) res
	on (res.ParentGLN = pa.GLN)
Genererad på 369 ms · cache AV · v20260730165559-full.f96bc7eb