Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: Lege datum waarden  (gelezen 3727 keer)

0 leden en 1 gast bekijken dit topic.

Offline Myclos81

  • Ervaren lid
  • ***
  • Berichten: 272
  • Oplossing.be
Lege datum waarden
« Gepost op: 02 februari 2012, 16:56:29 »
Lege datum waarden
Beste,


Code:
SELECT facturen.facturatie_datum,   
          facturen.factuurnr,   
          facturen.factuurbedrag,
     left(f_gettranslation ('DYNAMIC_DDDW_VALUES',month(facturen.facturatie_datum),
     (select dddw_value from dynamic_dddw_values where dddw_value_id = month(facturen.facturatie_datum))) ,3) as maand_naam

FROM facturen,
          project

WHERE (project.projectid = facturen.project_id ) and 
     (( project.invoice_group_id = 277 ) AND            
     (facturen.facturatie_datum >= '2006-01-01' ) AND 
      (facturen.facturatie_datum <= '2012-02-01') )Bij deze query krijg ik volgend resultaat

2012-01-26 ZERO 0.00 Jan
2011-12-22 00000001 2383.94 Dec
2011-12-22 00000002 1402.00 Dec
2011-12-22 00000004 1897.13 Dec
2007-12-22 00000003 1897.13 Dec
2008-12-22 00000007 1069.48 Dec
2012-01-04 00000005 799.43 Jan
2012-01-04 00000006 200.57 Jan

Nu heb ik een rapport die een crosstab toont van bovenaan de jaren, links de maanden. Bij deze query toont hij dus enkel januari en december. Hoe kan ik in mijn SQL ervoor zorgen dat hij de overige maanden ook toont maar dan wel met waarden 0 ?

Ik weet niet of dit überhaupt mogelijk is maar het is gewoon om het overzicht te bewaren. Ik wil dus dat hij steeds 12 maanden toont (de lege met 0) en niet enkel degene die waarden bevatten in de database. De data die ontbreekt voor de maanden (die dus niet bestaat) zou ik willen genereren (met een outer join ? geprobeerd maar niet gelukt). 

De tabel dynamic_dddw_values bevat de namen van de maand en neemt de eerste drie letters.

Hopelijk is dit voldoende info ?

Mvg,
M81 http://
P4VT8+ , GeForce 6200, Windows XP Prof SP2, Intel(R) Pentium(R) 4 CPU 2.80GHz, 768 MB RAM, HDD:80 + 80 GB, NTFS, telenet, AVG antivirus, Internet Explorer 6.0, Outlook Express

Offline Firebirdy

  • Ambassadeur
  • *****
  • Berichten: 2.408
  • Geslacht: Man
Re: Lege datum waarden
« Reactie #1 Gepost op: 04 februari 2012, 04:22:18 »
Een outer join is inderdaad wat je nodig hebt :).

Kan je je query niet herstructureren?

SELECT ddv.dddw_value, facturen.*
FROM dynamic_dddw_values as ddv LEFT JOIN facturen ON month(facturen.facturatie_datum) = ddv.dddw_value_id
...

Offline Myclos81

  • Ervaren lid
  • ***
  • Berichten: 272
  • Oplossing.be
Re: Lege datum waarden
« Reactie #2 Gepost op: 06 februari 2012, 09:14:37 »
Hi Firebirdy,

je hebt me al wat op ge goede weg geholpen maar ik zit nu met een foutmelding die ik niet opgelost krijg.
Dit is mijn query nu:

SELECT dynamic_dddw_values.dddw_value,
          facturen.facturatie_datum,   
          facturen.factuurnr,   
          facturen.factuurbedrag,
     left(f_gettranslation ('DYNAMIC_DDDW_VALUES',month(facturen.facturatie_datum),
     (select dddw_value from dynamic_dddw_values where dddw_value_id = month(facturen.facturatie_datum))) ,3) as maand_naam

FROM dynamic_dddw_values,
          facturen,
          project

LEFT OUTER JOIN DYNAMIC_DDDW_VALUES ON month(facturen.facturatie_datum) = DYNAMIC_DDDW_VALUES.DDDW_VALUE_ID

WHERE (project.projectid = facturen.project_id ) and 
     (( project.invoice_group_id = 277 ) AND             
     (facturen.facturatie_datum >= '2006-01-01' ) AND 
      (facturen.facturatie_datum <= '2012-02-01')

Als ik dit uitvoer krijg ik de melding: "Illegal reference to correlation name 'facturen'.
Heeft dit te maken dat month(facturen.facturatie_datum) een functie is en geen ID ?
P4VT8+ , GeForce 6200, Windows XP Prof SP2, Intel(R) Pentium(R) 4 CPU 2.80GHz, 768 MB RAM, HDD:80 + 80 GB, NTFS, telenet, AVG antivirus, Internet Explorer 6.0, Outlook Express

Offline Firebirdy

  • Ambassadeur
  • *****
  • Berichten: 2.408
  • Geslacht: Man
Re: Lege datum waarden
« Reactie #3 Gepost op: 06 februari 2012, 14:13:14 »
Die outer join maakt deel uit van je from clause, maar jij zet ze er achteraan nog eens extra bij...

Probeer dit eens? Ik heb het wel niet getest en m'n sql is tegenwoordig wat roestig :).

SELECT dynamic_dddw_values.dddw_value,
          facturen.facturatie_datum,   
          facturen.factuurnr,   
          facturen.factuurbedrag,
     left(f_gettranslation ('DYNAMIC_DDDW_VALUES',month(facturen.facturatie_datum),
     (select dddw_value from dynamic_dddw_values where dddw_value_id = month(facturen.facturatie_datum))) ,3) as maand_naam

FROM (facturen INNER JOIN project ON project.projectid = facturen.projectid) RIGHT JOIN dynamic_dddw_values
ON month(facturen.facturatie_datum) = dynamic_dddw_values.dddw_value_id

WHERE project.invoice_group_id = 277 AND             
     facturen.facturatie_datum >= '2006-01-01' AND 
      facturen.facturatie_datum <= '2012-02-01'

Offline Myclos81

  • Ervaren lid
  • ***
  • Berichten: 272
  • Oplossing.be
Re: Lege datum waarden
« Reactie #4 Gepost op: 06 februari 2012, 14:39:53 »
Die outer join maakt toch geen deel uit van mijn FROM clause?
Die left(f_gettranslation ....) is geen join maar een functie om de eerste 3 letters van mijn maand te verkrijgen.

Ik heb uw voorstel geprobeerd en hij toont resultaten maar de maanden die leeg zijn toont hij niet, wat toch de bedoeling is.

Als ik dit probeer:

....
FROM  dynamic_dddw_values,
           facturen

LEFT OUTER JOIN dynamic_dddw_values ON month(facturen.facturatie_datum) = dynamic_dddw_values.DDDW_value_ID
.....

dan zou hij toch de waarden van de tabel "dynamic_dddw_values" die niet aanwezig zijn in facturen toch ook moeten tonen ?
Maar dat doet hij dus niet, ik snap dan niet waarom mijn LEFT OUTER JOIN niet werkt ??

Mvg,
M81
P4VT8+ , GeForce 6200, Windows XP Prof SP2, Intel(R) Pentium(R) 4 CPU 2.80GHz, 768 MB RAM, HDD:80 + 80 GB, NTFS, telenet, AVG antivirus, Internet Explorer 6.0, Outlook Express

Offline Firebirdy

  • Ambassadeur
  • *****
  • Berichten: 2.408
  • Geslacht: Man
Re: Lege datum waarden
« Reactie #5 Gepost op: 06 februari 2012, 22:04:31 »
Je neemt dynamic_dddw_values twee keer op in je from clause, dat is niet de bedoeling :). Een keer apart en een keer als onderdeel van je outer join. Zorgt dat niet voor problemen? Je verwijdert die eerste referentie best.

Offline Myclos81

  • Ervaren lid
  • ***
  • Berichten: 272
  • Oplossing.be
Re: Lege datum waarden
« Reactie #6 Gepost op: 07 februari 2012, 13:05:54 »
Ah zo bedoel je. Je hebt gelijk.
Heb het verwijderd maar krijg nog steeds hetzelfde resultaat.

Snap er echt niks meer van  ??? ??? :-\ :-\ :-\ :-\
P4VT8+ , GeForce 6200, Windows XP Prof SP2, Intel(R) Pentium(R) 4 CPU 2.80GHz, 768 MB RAM, HDD:80 + 80 GB, NTFS, telenet, AVG antivirus, Internet Explorer 6.0, Outlook Express

Offline Myclos81

  • Ervaren lid
  • ***
  • Berichten: 272
  • Oplossing.be
Re: Lege datum waarden
« Reactie #7 Gepost op: 13 februari 2012, 08:38:39 »
Firebirdy,

het lukte niet omdat 1 veld (month(facturen.facturatie_datum)) geen key is.
Ik zal dus een andere oplossing moeten zoeken, waarschijnlijk werken met een temp-table.
P4VT8+ , GeForce 6200, Windows XP Prof SP2, Intel(R) Pentium(R) 4 CPU 2.80GHz, 768 MB RAM, HDD:80 + 80 GB, NTFS, telenet, AVG antivirus, Internet Explorer 6.0, Outlook Express

 


www.combell.com