![]() |
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:
hat da jemand einen Tipp?
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 Shalom Manfred |
Re: SQL Problem
Du mußt innerhalb des count die Werte ausfiltern, das geht mit IIF() [ab FB2] oder CASE , COLAESCE
|
Re: SQL Problem
Zitat:
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. |
Re: SQL Problem
SQL-Code:
... COUNT( case when MEMBER.AUX_NO > 3 then MEMBER.AUX_NO else 0 end) ...
|
Re: SQL Problem
Besten Dank :drunken:
habe es wie von Dir vorgeschlagen so gelöst:
SQL-Code:
habe nur rausgefunden das leider die möglichkeit besteht das das Feld
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 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 |
Re: SQL Problem
Welchen Typ hat das Feld?
|
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:
Cu,
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 Udontknow |
Re: SQL Problem
Zitat:
|
Re: SQL Problem
SQL-Code:
COUNT( case when MEMBER.AUX_NO >0 and trim(MEMBER.AUX_No) <> '' then MEMBER.AUX_NO else 0 end)
|
Re: SQL Problem
Zitat:
SQL-Code:
Cu,
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 Udontknow |
Re: SQL Problem
Zitat:
Manfred |
Re: SQL Problem
Zitat:
|
Re: SQL Problem
Zitat:
Wechsel... :gruebel: ok das währe dann ein neuer Thread.. Manfred |
Re: SQL Problem
Hmmm, ich glaube, die Funktionen sind auch bei 1.5 dabei, aber man muss sie einmal manuell registrieren mit einem SQL-Skript oder so. Da war irgendwas mit dem Stichwort "UDF"... Sorry, zu lange her...
Cu, Udontknow |
Re: SQL Problem
Zitat:
Besten Dank dür Deine Tipps. :thumb: |
Re: SQL Problem
Hallo
hab nochmals was anderes Probiert.
SQL-Code:
Das Problemist das hier alle "Linien" gezählt werden nicht nur die bei denen
COUNT( CASE WHEN MEMBER.CERT_A = 'True' THEN MEMBER.CERT_A ELSE 'False' END ) COUNT_OF_AUX_NO
das Feld MEMBER.CERT_A True ist?? Ein Tipp? Manfred |
Re: SQL Problem
Count zählt ja die Anzahl der Datensätze, egal welchen Wert diese haben.
|
Re: SQL Problem
Ja
Du hast mir ja weiter forne einen Tipp gegeben:
SQL-Code:
und hier werden doch auch "nur" die Datensätze gezählt die >3 sind oder ncht?
COUNT( case when MEMBER.AUX_NO > 3 then MEMBER.AUX_NO else 0 end)
|
Re: SQL Problem
Hallo!
probiere es mal mit "else NULL", dann dürften sie nicht mitgezählt werden. Unabhängig davon: Funktioniert das von mir vorgeschlagene SQL nicht? Cu, Udontknow |
Re: SQL Problem
Zitat:
SQL-Code:
geht einwandfrei.
COUNT( CASE WHEN MEMBER.CERT_A = 'True' THEN MEMBER.CERT_A ELSE NULL END ) COUNT_OF_AUX_NO
Zitat:
Danke aber vielmals Euch beiden !! :cheers: :corky: |
Re: SQL Problem
Vermutlich hätte es auch so funktioniert:
SQL-Code:
SUM( CASE WHEN MEMBER.CERT_A = 'True' THEN 1 else 0 end)
|
Re: SQL Problem
Zitat:
Shalom Manfred |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz