[SQL]kolommen uit twee tabellen tot één combineren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • LiquidSmoke
  • Registratie: Maart 2001
  • Laatst online: 11-09 09:36
Ik ben al een paar dagen aan het worstelen met het volgende, ik de volgende query:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
  IMPkader.KPLT,
  IMPkader.KSRT AS KRSTKAD, 
  IMPind.KSRT AS KSRTIND,
  IMPkader.KADERaant,
  IMPkader.KADERbedrag,
  IMPind.INDaant,
  IMPind.INDbedrag
FROM
  dbo.IMPkader
  FULL OUTER JOIN dbo.IMPind
    ON IMPkader.KPLT = IMPind.KPLT AND IMPkader.KSRT = IMPind.KSRT AND IMPind.PER = IMPkader.PER AND IMPind.Jaar = IMPkader.Jaar
WHERE
  IMPind.KPLT = 7680


Welke deze resultset genereert:

Afbeeldingslocatie: http://www.famzande.nl/joey/qry_kad.png

Nu wil ik eigenlijk de KSRT kolom combineren (en ook de KPLT trouwens)

Ik dacht eigenlijk dat met een full outer join e.a. vanzelf gecombineerd zou worden...

Misschien iemand die een duw in de goede richting kan geven?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
LiquidSmoke schreef op vrijdag 22 juli 2011 @ 11:46:
Misschien iemand die een duw in de goede richting kan geven?
Als je eerst eens even probeert in begrijpelijke taal uit te leggen wat je nou precies aan 't doen bent want ik kan er geen touw aan vastknopen. En wat versta je onder "combineren"?
SQL:
1
2
select VeldA + VeldB
from...

Dat moet al volstaan bij varchars; bij int's e.d. zul je nog moeten casten naar een (var)char.

Wanneer je onder "combineren" verstaat (en wat ik vermoed dat je bedoelt) de bovenste en onderste helft van je resultset "in elkaar schuiven" dan zul je met héél wat meer info moeten komen; wat zijn de criteria, hoe ziet je data er uit (en wat betekent 't? Wat is KSRT(IND) e.d.) en hoe wil je het hebben. Met de zut (voor mij onherkenbare en onbegrijpelijke) afkortingen voor je veldnamen wordt 't er allemaal niet duidelijker op, al helemaal niet omdat ze ook nog allemaal op elkaar lijken.

Mijn zesde zintuig vertelt me dat je waarschijnlijk naar iets toe wil als:
SQL:
1
2
3
select a, b, coalesce(x.c, y.c), case when x.d = 0 then y.d else x.d end, e, f
from x
left outer join y on x.foo = y.bar


Voor c en d zie je hier 2 verschillende manieren om een selectie te maken voor de waarde uit tabel x danwel y.

offtopic:
Als je floats gebruikt voor bedragen, en daar lijkt 't op gezien de getallen in de ___bedrag kolommen in je resultset, ga dan eens heel snel onze Getallen en talstelsels FAQ lezen of deze video kijken (@6:10, waarbij het bij 8:34 voor jou interessant wordt)...

[ Voor 35% gewijzigd door RobIII op 22-07-2011 12:21 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Moraelyn
  • Registratie: Januari 2007
  • Laatst online: 12-08-2024
Bedoel je een UNION?

[ Voor 38% gewijzigd door Moraelyn op 22-07-2011 13:08 ]


Acties:
  • 0 Henk 'm!

  • LiquidSmoke
  • Registratie: Maart 2001
  • Laatst online: 11-09 09:36
RobIII schreef op vrijdag 22 juli 2011 @ 11:59:
[...]

Als je eerst eens even probeert in begrijpelijke taal uit te leggen wat je nou precies aan 't doen bent want ik kan er geen touw aan vastknopen. En wat versta je onder "combineren"?
SQL:
1
2
select VeldA + VeldB
from...

Dat moet al volstaan bij varchars; bij int's e.d. zul je nog moeten casten naar een (var)char.

Wanneer je onder "combineren" verstaat (en wat ik vermoed dat je bedoelt) de bovenste en onderste helft van je resultset "in elkaar schuiven" dan zul je met héél wat meer info moeten komen; wat zijn de criteria, hoe ziet je data er uit (en wat betekent 't? Wat is KSRT(IND) e.d.) en hoe wil je het hebben. Met de zut (voor mij onherkenbare en onbegrijpelijke) afkortingen voor je veldnamen wordt 't er allemaal niet duidelijker op, al helemaal niet omdat ze ook nog allemaal op elkaar lijken.

Mijn zesde zintuig vertelt me dat je waarschijnlijk naar iets toe wil als:
SQL:
1
2
3
select a, b, coalesce(x.c, y.c), case when x.d = 0 then y.d else x.d end, e, f
from x
left outer join y on x.foo = y.bar


Voor c en d zie je hier 2 verschillende manieren om een selectie te maken voor de waarde uit tabel x danwel y.

offtopic:
Als je floats gebruikt voor bedragen, en daar lijkt 't op gezien de getallen in de ___bedrag kolommen in je resultset, ga dan eens heel snel onze Getallen en talstelsels FAQ lezen of deze video kijken (@6:10, waarbij het bij 8:34 voor jou interessant wordt)...
Ah, coalesce was het duwtje wat ik nodig had.

De data is natuurlijk moeilijk te interpreteren zonder context;

Ik heb 3 tabellen, daarin staan kostenplaatsen en kostensoorten, er kunnen meerdere kostensoorten onder één kostenplaats vallen, de tabellen koppel ik o.a. op kostensoort (en plaats)

in de tabellen bevinden zich respectievelijk een gekaderd aantal en bedrag, een geindiceerd aantal en bedrag, en een aangevraagd aantel en bedrag.

een kostenplaats/soort kan in één van de drie tabellen voorkomen, in twee of in alle drie. Uit die drie tabellen wil ik gewoon ALLE kostensoorten/plaatsen hebben, ongeacht in welke tabel hij staat. (Een aanvraag of indicatie hoeft niet per sé gekaderd te zijn, maar een kader hoeft ook niet aangevraagd te zijn etc).

Dus, inderdaad, wil ik de drie tabellen in elkaar schuiven. coalesce doet wat ik wil voor zover ik kan zien :)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
En die floats?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • LiquidSmoke
  • Registratie: Maart 2001
  • Laatst online: 11-09 09:36
Mja, ik ben me bewust van de floating point getallen, en de mogelijke afrondingsfouten.

De db is niet door mij opgezet of genormaliseerd of wat dan ook, mij is enkel gevraagd om er wat rapportjes via een webinterface uit te halen :P

Heb de uitleg in het filmpje wel even doorgestuurd naar de betreffende afdeling, het word daar wel leuk uitgelegd :+
Pagina: 1