![]() |
Datenbank: Firebird • Version: 3.x • Zugriff über: IBDAC
Alle Werte im Bool Feld gleich oder nicht?
Hallo,
ich habe eine Tabelle mit einer Integer-ID und einem Boolean Feld MyField, das keine Null-Werte enthalten kann. Wie kann ich per SQL nun ermitteln, ob alle Datensätze mit einer bestimmte ID im Feld MyField nur true, nur false oder gemischt sind? select ... from MyTable where ID in (1, 2); Beispiele ID MyField 1 true 2 true 3 false SQL-Ergebnis soll true sein ID MyField 1 false 2 false 3 true SQL-Ergebnis soll false sein ID MyField 1 true 2 false 3 false SQL-Ergebnis soll null sein |
AW: Alle Werte im Bool Feld gleich oder nicht?
Bitte präzisiere Deine Fragestellung.
Zitat:
Das dritte Beispiel müsste daher für ID = 1 true liefern und für ID = 2 false. Ansonsten fragst Du nicht nach dem Ergebnis Zitat:
Zitat:
Weitere Besiepiele ID MyField 1 true 1 false 2 false 2 false 3 false SQL-Ergebnis soll für ID 1 null sein und für ID 2 false ID MyField 1 true 1 true 2 false 2 false 3 false SQL-Ergebnis soll für ID 1 true sein und für ID 2 false ID MyField 1 false 1 false 2 true 2 false 3 false SQL-Ergebnis soll für ID 1 false sein und für ID 2 null ID MyField 1 false 1 true 2 true 2 false 3 false SQL-Ergebnis soll für ID 1 und für ID 2 jeweils null |
AW: Alle Werte im Bool Feld gleich oder nicht?
Mir fällt nur sowas ein:
SQL-Code:
Wobei im Beispiel die Tabelle test und das Feld bool heisst.
with base as
( select bool from test where id in (1, 2) ) select case when (select count(*) from base) = (select count(*) from base where base.bool = true) then true when (select count(*) from base) = (select count(*) from base where base.bool = false) then false else null end result from rdb$database Ich würde dafür aber eine Stored Procedure schreiben...[EDIT]Ist Quatsch, geht bei in () ja gar nicht[/EDIT] Frank |
AW: Alle Werte im Bool Feld gleich oder nicht?
Zwei Versuche:
Wenn Auswertung ID-übergreifend gewünscht ist:
SQL-Code:
Wenn Auswertung je ID gewünscht ist:
select
case when (IsTrue + IsFalse) <> 1 then null else case when IsTrue = 1 then IsTrue else IsFalse end end as Ergebnis from ( select Max(IsTrue) as IsTrue, Max(IsFalse) as IsFalse from ( select distinct case when myField = true then 1 else 0 end as IsTrue, case when myField = false then 1 else 0 end as IsFalse from myTable where ID in (1,2) ) )
SQL-Code:
(nur ungetestet hingedaddelt)
select
ID, case when (IsTrue + IsFalse) <> 1 then null else case when IsTrue = 1 then IsTrue else IsFalse end end as Ergebnis from ( select ID, Max(IsTrue) as IsTrue, Max(IsFalse) as IsFalse from ( select distinct ID, case when myField = true then 1 else 0 end as IsTrue, case when myField = false then 1 else 0 end as IsFalse from myTable where ID in (1,2) ) group by ID ) |
AW: Alle Werte im Bool Feld gleich oder nicht?
Das müsste aber auch einfacher gehen. Natürlich auch ungetestet:
SQL-Code:
Select
IIF(Max(myField) = Min(myField), Max(myField), NULL) from myTable where ID in (1,2) |
AW: Alle Werte im Bool Feld gleich oder nicht?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 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-2025 by Thomas Breitkreuz