Ich mache nicht viel SQL, und die meiste Zeit mache ich CRUD-Operationen. Gelegentlich bekomme ich etwas komplizierter. Also, diese Frage kann eine neue Frage sein, aber ich bin bereit. Ich habe gerade versucht, das stundenlang herauszufinden, und es hat keinen Sinn gemacht.SELECT mit berechneter Spalte, die von einer Korrelation abhängig ist
So Stellen Sie sich die folgende Tabelle Struktur:
> | ID | Col1 | Col2 | Col3 | .. | Col8 |
Ich möchte ID und eine berechnete Spalte wählen. Die berechnete Spalte hat einen Bereich von 0 - 8 und enthält die Anzahl der Übereinstimmungen mit der Abfrage. Ich möchte auch die Ergebnismenge auf Zeilen beschränken, die eine bestimmte Anzahl von Übereinstimmungen haben.
Also, aus diesen Beispieldaten:
> | 1 | 'a' | 'b' | 1 | 2 |
> | 2 | 'b' | 'c' | 1 | 2 |
> | 3 | 'b' | 'c' | 4 | 5 |
> | 4 | 'x' | 'x' | 9 | 9 |
Ich mag auf Col1 = 'a' OR Col2 = 'c' abzufragen OR Col3 = 1 OR Col4 = 5, wobei das berechnete Ergebnis> 1 und habe die Ergebnismenge wie folgt aussehen:
> | ID | Cal |
> | 1 | 2 |
> | 2 | 2 |
> | 3 | 2 |
ich bin mit T-SQL und SQL Server 2005, wenn es darauf ankommt, und ich kann nicht das DB-Schema ändern.
Ich würde es auch bevorzugen, es als eine in sich geschlossene Abfrage zu halten und nicht eine gespeicherte Prozedur oder temporäre Tabelle erstellen müssen.
Versuchen Sie dies: SELECT * FROM Tabelle WHERE (Col1 = 'a' OR Col2 = 'c' OR Col3 = 1 OR Col4 = 5) und (COUNT (Col1)> 1 OR COUNT (Col2)> 1 ODER COUNT (Col3)> 1 oder COUNT (Col4)> 1) GROUP BY Col1, Col2, Col3, Col4 Nicht getestet ... – Havenard
Können Sie Ihre Ergebnistabelle erklären? – pjp
Warum hat Ihr Resultset für Id = 3 in Ihrem Beispiel eine berechnete Spaltensumme von 3? Sieht so aus, als sollte es 2 sein. – jro