2010-12-28 4 views
4

Ich habe zwei Tabellen; nennen wir sie TableA und TableB. Jedes Element von TableB ist in einer Viele-zu-Eins-Beziehung einem Element von TableA zugeordnet. Einige Elemente von TableA enthalten möglicherweise kein entsprechendes Element in TableB.Beitreten und in SQL Server zählen

Ich muss jedes Element in TableA auswählen, zusammen mit einer Spalte, die für jede Zeile in der Ergebnismenge die Anzahl der Elemente in TableB enthält, die dieser Zeile in TableA zugeordnet sind und über eine bestimmte Eigenschaft verfügen .

Verwendung von MS SQL Server 2008 (muss auch in SQL Server 2005 funktionieren).

Antwort

7

aktualisiert

SELECT A.elementid, A.column1, A.column2, A.column3, 
     COUNT(CASE WHEN B.someColumn > 0 THEN B.elementid ELSE NULL END) Q 
FROM TableA A 
LEFT JOIN TableB B 
ON A.elementid = B.elementid 
GROUP BY A.elementid, A.column1, A.column2, A.column3 
+0

Ich muß nur die Anzahl der Elemente von B erhalten, die mit jeder Zeile von A verbunden ist, * und daß eine bestimmte Eigenschaft * befriedigen. Zur Konkretheit sagen wir, diese Eigenschaft ist "B.someColumn> 0" –

+0

Ok, ich habe die Antwort aktualisiert, um dies widerzuspiegeln – Lamak

+0

Danke! CASE WHEN war die Zauberformel, nach der ich suchte. –

3
SELECT TableA.MyColumn, COUNT(TableB.SomeColumn) AS MyCount 
FROM TableA 
LEFT OUTER JOIN TableB ON TableA.TableAKeyColumn = TableB.TableAKeyColumn 
GROUP BY TableA.MyColumn 
+0

Bitte beachten Sie meinen Kommentar zu der obigen Antwort. –

+0

@Brennan Vincent die Reihenfolge der Antworten spiegelt nicht die Reihenfolge, in der sie eingegeben wurden, genau wie Zeilen in SQL-Tabelle –