[SQL] Rijen combineren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 25-08 14:07
Hallo,

Ik zit met een kleine queste die mijn ontwikkeling een beetje ophoud.

Na uren zoeken op het internet naar join, group by, merge, concat ben ik ten einde raad en post hier mijn vraag.

Ik heb een result-set die als volgt uitziet:

code:
1
2
3
4
12 | null | 4
12 | 6 | null
12 | 5 | null
12 | null| 2


Dat moet worden samengevoegd op basis van de hoogste waardes van kolom 2 en 3. Het resultaat moet dus worden:

code:
1
12 | 6 | 4


Tevens kan het zijn, dat ook de volgende resultset wordt gegeven:
code:
1
2
12 | null | 4
12 | null | 2


Dit zou dan moeten worden:
code:
1
12 | null | 4


Hierbij is de eerste kolom de verbindende sleutel, en naast 12 zijn er nog 1.000.000 andere id's die op deze manier moeten worden gecombineerd, het gaat dus helaas niet om een simpele samenvoeging van een enkel id.

Zoals eerder aangegeven lukt het mij met niet en na vele pogingen op internet een soort gelijk secenario is het me niet gelukt om tot een oplossing te komen.

Wie kan mij helpen?

[ Voor 23% gewijzigd door Depress op 02-03-2011 12:05 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Bedoel je zoiets als dit:

SQL: filename
1
2
3
4
5
6
7
8
9
10
11
DECLARE @test TABLE
(nr1 int, nr2 int, nr3 int)

INSERT INTO @test

VALUES (1, 2, 4),
(2, 4, 8),
(3, 2, 1)

SELECT MAX(nr1) AS nr1, MAX(nr2) AS nr2, MAX(nr3) AS nr3
FROM @test


(SQL Server 2008, moet vast om te bouwen zijn naar andere RDBMS'en)

[ Voor 7% gewijzigd door Verwijderd op 02-03-2011 12:19 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:03

Creepy

Tactical Espionage Splatterer

Wat voor queries heb je dan al allemaal geprobeerd en wat lukte daar dan niet mee?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op woensdag 02 maart 2011 @ 12:18:
Bedoel je zoiets als dit:

SQL: filename
1
2
3
4
5
6
7
8
9
10
11
DECLARE @test TABLE
(nr1 int, nr2 int, nr3 int)

INSERT INTO @test

VALUES (1, 2, 4),
(2, 4, 8),
(3, 2, 1)

SELECT MAX(nr1) AS nr1, MAX(nr2) AS nr2, MAX(nr3) AS nr3
FROM @test


(SQL Server 2008, moet vast om te bouwen zijn naar andere RDBMS'en)
Waarom een max op de eerste kolom in plaats van gewoon kolom 1 selecteren en erop te groupen?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 25-08 14:07
Ik heb het probleem getackeld, door een group by op het ID te doen, en daarna max te gebruiken. Dit werkte in eerste instantie niet omdat deze geen NULL waarde accepteerde, daarom heb ik deze vervangen door de waarde 0 en later met een case statement weer omgevormd naar de definitieve waarde(character) voor sql output.

Ik was veel te moeilijk aan het zoeken en kon het makkelijk oplossen.

Dit staat dan weer los van mijn eerder probleem, maar wanneer je 2 rijen wilt combineren en gebruikt maakt van strings, zal dit niet gaan werken, hoe zou je dit dan het beste kunnen aanpakken?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Depress schreef op woensdag 02 maart 2011 @ 13:32:
Dit staat dan weer los van mijn eerder probleem, maar wanneer je 2 rijen wilt combineren en gebruikt maakt van strings, zal dit niet gaan werken, hoe zou je dit dan het beste kunnen aanpakken?
Dat hangt maar net af van wat je precies wil selecteren.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 01-09 13:39

Big Womly

Live forever, or die trying

Dit is basis SQL, hier moet je zelfs geen DB-specifieke trucs voor uitvoeren.
SQL:
1
2
3
4
5
6
7
8
select c1, max(c2), max(c3) 
from ( select 12 as c1, null as c2, 4 as c3 from dual union
       select 12,       6,          null    from dual union
       select 12,       5,          null    from dual union
       select 12,       null,       2       from dual
)
group by c1
/


Resulteert in
1264


en
SQL:
1
2
3
4
5
6
select c1, max(c2), max(c3) 
from ( select 12 as c1, null as c2, 4 as c3 from dual union
       select 12,       null,       2       from dual
)
group by c1
/


resulteert in
12 4


Dit is toch wat je moest hebben?

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


Acties:
  • 0 Henk 'm!

  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 24-08 23:40

Killemov

Ik zoek nog een mooi icooi =)

... ware het niet dat de "12" een id is naast 1000000 andere id's. Basis-lezen is ook een vak he?

Hey ... maar dan heb je ook wat!


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Killemov schreef op donderdag 03 maart 2011 @ 17:43:
[...]

... ware het niet dat de "12" een id is naast 1000000 andere id's. Basis-lezen is ook een vak he?
Daar zorgt die group by toch gewoon voor? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1