6 Stimmen

Bedingte Summe in SQL Server

Ich habe diese Tabelle in MSSQL:

ID   OP1   OP2  OP3
330   0     0    1
331   1     0    0
332   3     2    0

OP's sind Optionen. Es kann von 1 bis 9 gehen, 0 bedeutet, dass die Frage nicht beantwortet wurde.

Wie kann ich in einer Spalte mit der Bezeichnung "Beantwortet" "summieren", etwa so:

ID   OP1   OP2  OP3  T
330   0     0    1   1
331   1     0    0   1
332   3     2    0   2

Ein Wert über 0 bedeutet beantwortet.

Ich versuche es mit CASE WHEN, IF-Anweisungen.

7voto

JNK Punkte 60318

Utilisez CASE :

SELECT Id, OP1, OP2, OP3, 
       (CASE WHEN OP1 > 0 THEN 1 ELSE 0 END +
        CASE WHEN OP2 > 0 THEN 1 ELSE 0 END +
        CASE WHEN Op3 > 0 THEN 1 ELSE 0 END) AS T
FROM MyTable

4voto

gbn Punkte 407102

Weniger sperrig als Koffer. SIGN ergibt 1 für einen Wert > 0

SELECT
   ID,
   OP1,OP2,OP3,
   SIGN(OP1) + SIGN(OP2) + SIGN(OP3) AS T
FROM
   OPTABLE

Bearbeiten, Mai 2013. Eigentlich kann dies einfacher sein mit

SIGN(OP1+OP2+OP3) AS T

2voto

Peter Alexander Punkte 51742

Andere haben Ihre Frage bereits beantwortet, aber im Idealfall würden Sie Ihre Daten nicht auf diese Weise speichern.

Diese Tabelle wäre besser:

id   op   value
330  1    0
330  2    0
330  3    1
331  1    1
331  2    0
331  3    0
332  1    3
332  2    2
332  3    0

Dann können Sie die Summe für eine ID mit einer einfacheren Abfrage ermitteln:

SELECT COUNT(*) AS T FROM table WHERE id = x AND VALUE > 0

Sie lässt sich auch besser skalieren, wenn Sie mehr Optionen hinzufügen möchten, und bietet eine einfachere Möglichkeit, Datenabfragen über bestimmte Optionswerte zu erstellen.

0voto

Leons Punkte 2584

Wie wäre es mit folgendem:

SELECT ID,
       OP1,
       OP2,
       OP3,
       CASE WHEN OP1 = 0 THEN 0 ELSE 1 END + 
       CASE WHEN OP2 = 0 THEN 0 ELSE 1 END +
       CASE WHEN OP3 = 0 THEN 0 ELSE 1 END AS T

EDITAR:

0voto

Rahul Punkte 73710

Versuchen Sie dies:

SELECT ID,OP1,OP2,OP3,(OP1+OP2+OP3) AS T FROM OPTABLE

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X