Hilfe bei SQL Abfrage: Signal in Ordnung

Pilli

Neuer Benutzer
Beiträge
2
Hallo,

ich habe eine Checkliste mit mehreren Fragestellungen zu einem Signal. Wenn alle Fragen mit JA (+) beantwortet worden, hätte ich gerne einen Datensatz mit "Signal ist in Ordnung"
Wenn eine der Fragen mit Nein beantwortet wird, hätte ich gerne einen Datensatz mit der Info "Signal ist nicht in Ordnung".

Ich bin leider mit meinen eigenen Ideen auf keine Lösung gekommen.

Vielleicht hat jemand eine Idee und kann mir helfen.

select

act_note as Signal, ack_event as AA_Nummer, ack_act as Tätigkeitsnummer, ack_desc, ack_yes as in_Ordnung, ack_no as nicht_in_Ordnung , ack_notes as Beschreibung_Fehler

from r5actchecklists, r5activities

where ack_event = act_event and act_act =ack_act and ack_event = '164288'
upload_2019-5-29_9-23-52.png
 
Werbung:
Ich hab das mal vereinfacht:

Code:
test=# create table pilli(signal int, frage int, okay bool);
CREATE TABLE
test=*# insert into pilli values (1, 1, true);
INSERT 0 1
test=*# insert into pilli values (1, 2, true);
INSERT 0 1
test=*# insert into pilli values (1, 3, true);
INSERT 0 1
test=*# insert into pilli values (2, 1, true);
INSERT 0 1
test=*# insert into pilli values (2, 2, false);
INSERT 0 1

test=*# select * from pilli ;
 signal | frage | okay
--------+-------+------
      1 |     1 | t
      1 |     2 | t
      1 |     3 | t
      2 |     1 | t
      2 |     2 | f
(5 rows)

Für signal=1 sind alle 3 Fragen TRUE, für signal=2 von 2 Fragen eine FALSE.

Code:
test=*# select signal, case when count(frage) = sum(case when okay then 1 else 0 end) then true else false end from pilli group by signal;
 signal | case
--------+------
      1 | t
      2 | f
(2 rows)

test=*#
 
Das ist in mehreren Punkten gruselig.

  • Die Tabellen haben offensichtlich Spalten mit Tabellenpräfix, das ist eher unsinnig. Arbeite lieber mit Tabellenaliasen, siehe Beispiel.
  • Die Präfixe sind sich zudem extrem ähnlich, ich bin nicht sicher welche Spalte aus welcher Tabelle kommt.
  • Nutze bitte explizite Joins, siehe Beispiel.
  • Die Information in Ordnung / nicht in Ordnung passt in eine Binäre Spalte, du hast zwei Spalten mit einem Zeichen drin?

Beispiel:
Code:
select

act_note as Signal,
ack_event as AA_Nummer,
(CASE WHEN max(CASE WHEN ack_no = '+' THEN 1 ELSE 0 END) = 1 THEN 'nicht in Ordnung' ELSE 'in Ordnung' END) AS [i.O.]

FROM   r5actchecklists chkl
INNER JOIN r5activities act
ON       chkl.ack_event = act.act_event
AND       chkl.ack_act = act.act_act
WHERE   ack_event = '164288'
GROUP BY act_note,ack_event
 
Werbung:
Zurück
Oben