[MS Access]Kolom met query opsplitsen in 2 kolommen

Pagina: 1
Acties:

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
Hallo, ik heb eindelijk getracht mijn databasemodel iets te verbeteren. Nu heb ik al mijn gegevens in een grote tabel, en niet meer per station een tabel. Maar om een chart te maken in VB. NET heb ik per serie een kolom nodig. Nu staat alles onder elkaar en zou ik dus bv van de temperatuur (t2m kolom) maar 1 serie kunnen maken per query, maar ik moet in een query ook meerdere series kunnen maken.

mn database ziet er zo uit:
Afbeeldingslocatie: http://picserver.org/view_image.php/2UWEXI4Z09OP

de gegevens tabel zo:
code:
1
2
3
4
stationId   fictievedatum   voorspeltermijnId   reeksId t2m  ff
1          27-11-2002 3:00          0             2    2,8     1,4
2          27-11-2002 3:00          0             2       5,7     1,8
3          27-11-2002 3:00          0             2       6,75    4,6


Maar nu moet ik bv. 2 kolommen van t2m kunnen krijgen die verbonden zijn aan een reeksId van 1 respectievelijk 2.
Kan dat in een query, of is de database opbouw weer verkeerd :)
Alvast bedankt

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Waarom heb je een aparte tabel datums ? :?

https://fgheysels.github.io/


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
ah was niet echt nodig, klein experimentje, niet echt relevant :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Wat wil je dan eigenlijk als output krijgen van die query ?

zoiets:
code:
1
2
3
select datum, t2m
from gegevens
where station_id = id_van_gewenste_station

:?

(Daarnaast kan je ook beter referentiele integriteit enforcen).

https://fgheysels.github.io/


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
nope, ik wil de kolom t2m gesplitst hebben... Daardoor had ik eerst alles in verschillende tabellen staan (per station).

Ik wil een output van de query die er zo uitziet:
code:
1
2
3
4
5
|fictievedatum|station  |t2m die hoort bij reeks1|t2m die hoort bij reeks 2|
---------------------------------------------------------------------------
|1-1-2003     |de bilt  |2,3                     |2,5                      |
---------------------------------------------------------------------------
etc etc


Wat is het enforcen van referentiele integriteit :?
en is de opbouw van de database zo meer geslaagd?

[ Voor 7% gewijzigd door DarkShadow op 19-04-2004 14:20 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Gesplitst? In wat ?
Bedoel je dat je enkel de t2m gegevens wilt van reeks 1 bv? Zoja, dan is dat echt wel basis-kennis SQL hoor, en kan ik je enkel adviseren om eens een tutorial SQL door te nemen. (Je vindt er wel eentje in de FAQ).
code:
1
select * from metingen where reeksId = 1


Als je ze alletwee in 1 recordset wilt, dan zal je het met subqueries moeten doen.

Referentiele integriteit zorgt ervoor dat je bv. weerstation1 niet zomaar kunt verwijderen als er metingen zijn voor weestation1.

[ Voor 10% gewijzigd door whoami op 19-04-2004 14:21 ]

https://fgheysels.github.io/


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
dat is het dus niet, ik bedoel dat ik t2m gegevens wil van reeks 1 en van reeks 2, maar wel gescheiden in 2 verschillende kolommen...

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
code:
1
2
3
4
5
6
SELECT station, g1.t2m, g2.t2m
from weerstation, gegevens g1, gegevens g2
where weerstation.weerstation_id = g1.station_id
and weerstation.weerstation_id = g2.station_id
and g1.reeksid = 1 and g2.reeksid = 2
and weerstation.weerstation_id = 1


Je zal het zo ongeveer moeten doen; je zult dus 2x de gegevens tabel in je select query moeten gebruiken, aangezien je in 1 recordset gegevens wilt vanuit dezelfde tabel die aan verschillende voorwaarden voldoen.

[ Voor 31% gewijzigd door whoami op 19-04-2004 14:26 ]

https://fgheysels.github.io/


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
bedankt! wist niet dat het mogelijk was, het is alleen niet erg snel, maargoed hij selecteerd dan ook een beetje erg veel records tegelijkertijd.

de uitkomst klopt alleen nog niet helemaal:

code:
1
2
3
4
5
station g1.t2m  g2.t2m
Beek    5,3 7,05
Beek    5,3 11,15
Beek    5,3 6,15
Beek    5,3 5,55


De eerste t2m kolom blijft dezelfde waarde houden.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Ik denk dat je ergens met een cartesiaans product zit dan (niet snel en verkeerde resultaten).

Ben je zeker dat je alle tabels gejoined hebt ?

https://fgheysels.github.io/


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
tja je hebt het ontwerp gezien, dat zijn alle tabels die ik heb, en ze hebben allemaal een relatie met 'gegevens'. Kan het niet beter met inner joins?

Het is idd een cartesiaans product, hij blijft ook gewoon doorrekenen (duurt natuurlijk wel ff voordat je dan klaar bent :P )

[ Voor 33% gewijzigd door DarkShadow op 19-04-2004 15:03 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Als je joined in de where clausule zoals ik gedaan heb, dan zijn dat gewoon inner joins.

toon het SQL Statement eens dat je gebruikt hebt.

https://fgheysels.github.io/


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
code:
1
2
3
4
5
6
SELECT [station], g1.t2m, g2.t2m
FROM weerstations, gegevens AS g1, gegevens AS g2, voorspeltermijn
WHERE [weerstations].[stationId]=g1.stationId And [weerstations].[stationId]=g2.stationId
And g1.reeksid=1 And g2.reeksid=2 And [weerstations].[stationId]=1 And [voorspeltermijn].
[voorspeltermijnId]=g1.voorspeltermijnId And [voorspeltermijn].[voorspeltermijnId]
=g2.voorspeltermijnId And g1.voorspeltermijnId=g2.voorspeltermijnId;


Gewoon die van jou dus, alleen was die niet helemaal goed geformuleerd en ik heb het even uitgebreid met een voorwaarde voor voorspeltermijnId, maar dat hielp ook niet...

hmmm dit werkt wel:
code:
1
2
3
4
5
6
7
SELECT [station], g1.t2m, g2.t2m
FROM weerstations, gegevens AS g1, gegevens AS g2, voorspeltermijn
WHERE [weerstations].[stationId]=g1.stationId And [weerstations].[stationId]
=g2.stationId And g1.reeksid=1 And g2.reeksid=2 And [weerstations].[stationId]
=1 And [voorspeltermijn].[voorspeltermijnId]=g1.voorspeltermijnId And 
[voorspeltermijn].[voorspeltermijnId]=g2.voorspeltermijnId And 
g1.fictievedatum=g2.fictievedatum;


Als ik de fictievedatum van de een vergelijk met de fictievedatum van de ander. Maar ik snap niet waarom het nu wel werkt, want fictievedatums zijn niet uniek, ze zijn wel een stuk minder vaak identiek dan bv voorspeltermijn of reeks (er zijn maar 4 reeksen en iets van 15 voorspeltermijnen), maar waarom werkt dit dan ineens wel?

Of komt het door de combinatie met de anderen...

[ Voor 41% gewijzigd door DarkShadow op 19-04-2004 15:20 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Die laatste clausule in je where ziet er verdacht uit.

https://fgheysels.github.io/

Pagina: 1