AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Alle Werte im Bool Feld gleich oder nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Werte im Bool Feld gleich oder nicht?

Ein Thema von BlueStarHH · begonnen am 9. Jul 2023 · letzter Beitrag vom 9. Jul 2023
Antwort Antwort
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#1

Alle Werte im Bool Feld gleich oder nicht?

  Alt 9. Jul 2023, 13:00
Datenbank: Firebird • Version: 3.x • Zugriff über: IBDAC
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
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.431 Beiträge
 
Delphi 7 Professional
 
#2

AW: Alle Werte im Bool Feld gleich oder nicht?

  Alt 9. Jul 2023, 15:23
Bitte präzisiere Deine Fragestellung.
Zitat:
ob alle Datensätze mit einer bestimmte ID im Feld MyField nur true, nur false oder gemischt sind?
Du fragst aber mit IN zwei IDs ab.

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:
ob alle Datensätze mit einer bestimmte ID
sondern nach
Zitat:
ob alle Datensätze zusammengefasst zu allen angegebenen IDs im Feld MyField in Summe ausschließlich true, in Summe ausschließlich false oder gemischt sind?
Was ist gewünscht?

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
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Alle Werte im Bool Feld gleich oder nicht?

  Alt 9. Jul 2023, 16:52
Mir fällt nur sowas ein:

SQL-Code:
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
Wobei im Beispiel die Tabelle test und das Feld bool heisst.

Ich würde dafür aber eine Stored Procedure schreiben...[EDIT]Ist Quatsch, geht bei in () ja gar nicht[/EDIT]

Frank
Frank Reim

Geändert von dataspider ( 9. Jul 2023 um 17:02 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.431 Beiträge
 
Delphi 7 Professional
 
#4

AW: Alle Werte im Bool Feld gleich oder nicht?

  Alt 9. Jul 2023, 17:20
Zwei Versuche:

Wenn Auswertung ID-übergreifend gewünscht ist:
SQL-Code:
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)
  )
)
Wenn Auswertung je ID gewünscht ist:
SQL-Code:
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
)
(nur ungetestet hingedaddelt)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#5

AW: Alle Werte im Bool Feld gleich oder nicht?

  Alt 9. Jul 2023, 18:09
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)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Alle Werte im Bool Feld gleich oder nicht?

  Alt 9. Jul 2023, 18:22
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)
Danke, das klappt genau so, wie ich es brauche und ist schön kurz. Danke auch an alle anderen!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 Uhr.
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