2017-12-14 1 views
-2

Ich möchte wissen, ob es eine Option gibt, Spalten nach Bedingung auszuwählen.SQL Server - Spalte nach Bedingung auswählen

Die SQL-Abfrage besteht darin, zwei Zeilen aus einer Tabelle abzurufen und dann die einzelnen Spaltenwerte dieser beiden Zeilen zu vergleichen.

Ich mag die ausgewählten Spalt die Spalten mit nicht passenden seinem Wert

select * (only column with different values) 
from Account c 
where c.DistributorID = "ID" 
    and c.AccountID = "ID" or c.AccountID = "ID" 

****** bearbeiten ************

dies meine erste Frage, so leid, wenn ich nicht klar war ..

(Index) ---- ---- AccountID DistributorId ---- Bezeichnung --- Stadt --- Fun

1 ---------- 12345 ------------- 2 ------------ dan ------- NY --- ---- 5

2 ---------- 45678 ------------- 2 ----------- daniel ----- NY-- ----- 6

ich mag eine Abfrage erstellen, die nur die Spalten mit einem anderen Wert auszuwählen und anzuzeigen, in diesem Beispiel mir, was das Ergebnis sehen:

(Index) ---- AccountID ------- Name ---- Spaß

--- 1 -------- 12345 ----------- dan ------ 5

--- 2 -------- 45678 ---------- daniel ---- 6

+3

Beispieldaten und die gewünschten Ergebnisse werden uns helfen, Ihre Frage zu verstehen. –

+0

Wie geschrieben, ist dies überhaupt nicht klar, was Sie versuchen zu tun. Vielleicht deutlich, vielleicht eine Verbindung, vielleicht etwas ganz anderes. –

+0

c.AccountID = "ID" oder c.AccountID = "ID" ?? – Paparazzi

Antwort

0

Sie möchten alle Ihre Spalten eingeben. Dies würde bedeuten, dass Ihre wählen wird:

select column1,column2

Wenn Sie Zeilen entfernen möchten, wo column1 und column2 gleich sind, dann Ihre Abfrage wird:

select Column1, Column2 
from Account c 
where c.DistributorID= "ID"and 
c.AccountID = "ID" or c.AccountID = "ID" 
AND Column1 != Column2 
+2

bei der Verwendung von OR-Operatoren ist es immer eine gute Idee, Klammern – GuidoG

+0

das Problem mit dieser Lösung zu verwenden ist, dass ich 75 Spalte für jede Tabelle und ich habe 6 Tabellen. –

+0

Sie haben 6 Tabellen mit jeweils 75 Spalten, die Sie miteinander vergleichen möchten? Das ist (75 * (5 * 75)) + (75 * (4 * 75)) + (75 * (3 * 75)) + (75 * (2 * 75)) = 78750 Vergleiche. Oder verstehe ich deine Frage nicht (oder ist meine High School Mathe)? – Stefan

0

Wenn ich verstehe, was Sie suchen dann Ihre Lösung wird wahrscheinlich in dynamischen sql sein. Wenn Sie in sys.columns nach der object_id Ihrer Tabelle suchen, erhalten Sie eine Liste mit Spalten. Wenn Sie diese Liste verwenden, um den Spaltennamen zurückzugeben, wenn der Inhalt des Spaltennamens nicht übereinstimmt, können Sie etwas strukturieren, um diese Daten zurückzugeben.

Angenommen, Sie verwenden dies zum Erkennen von Unterschieden zwischen Zeilen, würde ich die Ausgabe von drei Spalten vorschlagen: Spaltenname, valueInRow1, valueInRow2 als eine lesbarere Ergebnismenge. Bitte beachten Sie, dass dies ein ziemlich klobiges und komplexes Stück TSQL sein wird, jedoch keine einfache Abfrage.

Die Technik hier ist ziemlich gut als Einzelstücke dokumentiert, obwohl nicht ganz so zusammen. Wenn Sie völlig stecken geblieben sind und keine Ahnung haben, wo Sie anfangen sollen, lassen Sie es mich wissen und ich bringe Sie zum Laufen. Hoffentlich reicht das, um dich auf einen Pfad zu bringen.

+0

das ist genau was ich will (sorry, wenn ich nicht so klar darüber war). Spaltenname, valueInRow1, valueInRow2 Aber ich weiß wirklich nicht, wo ich anfangen soll? Gibt es ein Dokument, das ich darüber lesen kann? –

0

Ich denke, was Sie suchen, ist, Werte in Ihrer Ergebnismenge abhängig von einer bestimmten Bedingung zu erhalten. Wenn das der Fall ist, dann CASE (Wortspiel beabsichtigt) können Ihnen helfen, Ihr Problem zu lösen:

select *, CASE c.AccountID 
         WHEN "ID1" THEN ColumnForID1 
         WHEN "ID2" THEN ColumnForID2 
         END 
from Account c 
where c.DistributorID= "ID"and c.AccountID in ("ID1", "ID2") 
+0

tnx 'aber das ist nicht der Fall, was ich will ist, alle Spalten mit einem anderen Wert für 2 verschiedene Zeilen zu bekommen –