Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Problem (https://www.delphipraxis.net/92366-sql-problem.html)

manfred_h 18. Mai 2007 16:03

Datenbank: Firbird • Version: 1.5 • Zugriff über: Fibplus

SQL Problem
 
Hallo zusammen

habe das Problem das ich mit folgendem funktionierendem SQL-Code
noch zusätlich bei COUNT( MEMBER.GIDEON_NO ) COUNT_OF_GIDEON_NO
und bei COUNT( MEMBER.AUX_NO ) COUNT_OF_AUX_NO
nur die Felder haben möchte ( beachtet werden sollen ) bei denen der wert > 0 ist
also sowas wie WHERE ((MEMBER.AUX_NO > 0))

SQL-Code:
SELECT CAMPS.C_NO, CAMPS.REG_NO, CAMPS.ZONE_NO, CAMPS.AREA_NO, CAMPS.CITY, CAMPS.COUNTRY, CAMPS.LANG,
COUNT( MEMBER.GIDEON_NO ) COUNT_OF_GIDEON_NO, COUNT( MEMBER.AUX_NO ) COUNT_OF_AUX_NO
FROM CAMPS
   INNER JOIN MEMBER ON (CAMPS.C_NO = MEMBER.C_NO)
GROUP BY CAMPS.C_NO, CAMPS.REG_NO, CAMPS.ZONE_NO, CAMPS.AREA_NO, CAMPS.CITY, CAMPS.COUNTRY, CAMPS.LANG
ORDER BY CAMPS.CITY
hat da jemand einen Tipp?

Shalom
Manfred

mkinzler 18. Mai 2007 16:14

Re: SQL Problem
 
Du mußt innerhalb des count die Werte ausfiltern, das geht mit IIF() [ab FB2] oder CASE , COLAESCE

manfred_h 18. Mai 2007 16:23

Re: SQL Problem
 
Zitat:

Zitat von mkinzler
Du mußt innerhalb des count die Werte ausfiltern, das geht mit IIF() [ab FB2] oder CASE , COLAESCE

Hi schön von Dir zu lesen. :roll:
Was macht man mit Firebird 1.5 ?
Ausser auf 2.0 Upgraden?

Sorry das ging zu schnell: Du schreibst ja > oder CASE , COLAESCE
Werde es testen.

mkinzler 18. Mai 2007 16:30

Re: SQL Problem
 
SQL-Code:
... COUNT( case when MEMBER.AUX_NO > 3 then MEMBER.AUX_NO else 0 end) ...

manfred_h 18. Mai 2007 16:49

Re: SQL Problem
 
Besten Dank :drunken:

habe es wie von Dir vorgeschlagen so gelöst:
SQL-Code:
SELECT CAMPS.C_NO, CAMPS.REG_NO, CAMPS.ZONE_NO, CAMPS.AREA_NO, CAMPS.CITY, CAMPS.COUNTRY, CAMPS.LANG,
COUNT( MEMBER.GIDEON_NO ) COUNT_OF_GIDEON_NO,
COUNT( case when MEMBER.AUX_NO >0 then MEMBER.AUX_NO else 0 end) COUNT_OF_AUX_NO
FROM CAMPS
   INNER JOIN MEMBER ON (CAMPS.C_NO = MEMBER.C_NO)
GROUP BY CAMPS.C_NO, CAMPS.REG_NO, CAMPS.ZONE_NO, CAMPS.AREA_NO, CAMPS.CITY, CAMPS.COUNTRY, CAMPS.LANG
ORDER BY CAMPS.CITY
habe nur rausgefunden das leider die möglichkeit besteht das das Feld
MEMBER.AUX_NO leer seinkann ( nicht NULL ) und dann erhalte ich eine Fehlermeldung.
Ist es möglich dies zu berücksichtigen?
Das Problem ist das wenn Der User einen Wert in das Feld eingiebt und diesen
dann weder löscht...

Manfred

mkinzler 18. Mai 2007 16:52

Re: SQL Problem
 
Welchen Typ hat das Feld?

Udontknow 18. Mai 2007 16:52

Re: SQL Problem
 
Hallo!

Kannst du das nicht einfach in die JOIN-Bedingung integrieren? Dafür müsstest du natürlich ein zweites Mal die Tabelle Members einbinden und evtl. aus dem Inner ein Left-Join machen.

SQL-Code:
SELECT CAMPS.C_NO, CAMPS.REG_NO, CAMPS.ZONE_NO, CAMPS.AREA_NO, CAMPS.CITY, CAMPS.COUNTRY, CAMPS.LANG,
COUNT( MEMBER_GID.GIDEON_NO ) COUNT_OF_GIDEON_NO, COUNT( MEMBER_AUX.AUX_NO ) COUNT_OF_AUX_NO
FROM CAMPS
LEFT JOIN MEMBER_GID ON (CAMPS.C_NO = MEMBER_GID.C_NO and MEMBER_GID.GIDEON_NO>0)
LEFT JOIN MEMBER_AUX ON (CAMPS.C_NO = MEMBER_AUX.C_NO and MEMBER_AUX.AUX_NO>0)
GROUP BY CAMPS.C_NO, CAMPS.REG_NO, CAMPS.ZONE_NO, CAMPS.AREA_NO, CAMPS.CITY, CAMPS.COUNTRY, CAMPS.LANG
ORDER BY CAMPS.CITY
Cu,
Udontknow

manfred_h 18. Mai 2007 16:54

Re: SQL Problem
 
Zitat:

Zitat von mkinzler
Welchen Typ hat das Feld?

AUX_NO T30 /* T30 = VARCHAR(30) */,

mkinzler 18. Mai 2007 16:58

Re: SQL Problem
 
SQL-Code:
COUNT( case when MEMBER.AUX_NO >0 and trim(MEMBER.AUX_No) <> '' then MEMBER.AUX_NO else 0 end)

Udontknow 18. Mai 2007 16:58

Re: SQL Problem
 
Zitat:

Zitat von manfred_h
Zitat:

Zitat von mkinzler
Welchen Typ hat das Feld?

AUX_NO T30 /* T30 = VARCHAR(30) */,

Dementsprechend natürlich angepasst:

SQL-Code:
SELECT CAMPS.C_NO, CAMPS.REG_NO, CAMPS.ZONE_NO, CAMPS.AREA_NO, CAMPS.CITY, CAMPS.COUNTRY, CAMPS.LANG,
COUNT( MEMBER_GID.GIDEON_NO ) COUNT_OF_GIDEON_NO, COUNT( MEMBER_AUX.AUX_NO ) COUNT_OF_AUX_NO
FROM CAMPS
LEFT JOIN MEMBER_GID ON (CAMPS.C_NO = MEMBER_GID.C_NO and MEMBER_GID.GIDEON_NO<>'0')
LEFT JOIN MEMBER_AUX ON (CAMPS.C_NO = MEMBER_AUX.C_NO and MEMBER_AUX.AUX_NO<>'0')
GROUP BY CAMPS.C_NO, CAMPS.REG_NO, CAMPS.ZONE_NO, CAMPS.AREA_NO, CAMPS.CITY, CAMPS.COUNTRY, CAMPS.LANG
ORDER BY CAMPS.CITY
Cu,
Udontknow


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz