2016-04-30 13 views
0

Ich habe eine Tabelle mit 50 Spalten. Sieht aus wie dieseWie wählt man alle Datensätze, in denen zwei beliebige Spalten über einem bestimmten Wert sind

GUID Field1 Field2 Field3 .... Field50 
---- ------ ------ ------  ------- 
1  0  1  0   0 
2  1  0  0   1 
3  0  2  3   1 

Ich brauche alle Datensätze zu finden, wo jedes zwei (oder mehr) der 50 Spalten> 0. Diese in Aufzeichnungen 2 und 3 zurückgegeben führen würde.

Ich bin mir nicht sicher, wie ich das angehen soll. Wenn ich versuchen würde, alle Permutationen zu testen, wäre es verrückt. Es muss einen besseren Weg geben.

Ich benutze SQL.

+0

Welche Datenbank verwenden Sie? Bitte markieren Sie entsprechend. –

Antwort

1

Sie haben wahrscheinlich das falsche Datenbankdesign. Wenn Sie die gleichen Daten in mehreren Spalten haben - nur durch ein numerisches Suffix unterschieden - dann deutet das normalerweise darauf hin, dass Sie wirklich eine richtige Junction-Tabelle haben möchten.

In jedem Fall können Sie dies tun, ist es nur eine lange case -basierte Bedingung:

select t.* 
from t 
where ((case when field1 > 0 then 1 else 0 end) + 
     (case when field2 > 0 then 1 else 0 end) + 
     . . . 
     (case when field50 > 0 then 1 else 0 end) + 
    ) >= 2; 

Sie müssen in der . . . mit den zusätzlichen 47 Felder auszufüllen.

+1

Meine Feldnamen sind nicht Feld1 Feld2 Ich habe nur das im Beispiel verwendet – Nuevallorker

Verwandte Themen