[英]Joining sql tables and count
試圖加入兩個SQL表,以便我可以計數。 例:
id | n_name | n_group tableA
--------------------
1 Peter S1
2 Paul S2
3 James A1
4 Arty S2
5 Amy S2
id | g_name | g_group tableB
--------------------
1 S1 Leader
1 S2 Leader
2 A1 User
我想以tableB為參考來計算tableA中有多少個領導者?
到目前為止,我所知道的是行不通的,但是我不知道如何加入表格
Try
connect()
cmd.CommandText = "SELECT count(n_group) FROM [tableA].........
Dim lrd As SqlDataReader = cmd.ExecuteReader()
lrd.Read()
label1.text = lrd("n_group").ToString()
lrd.Close()
disconnect()
Catch ex As System.Exception
label1.text = "0"
End Try
您可以使用此查詢
select b.g_group, count(b.g_group)
from tablea a inner join tableb b on a.n_group = b.g_name
group by b.g_group
您無需指定g_group內容,但可以將其用於GROUP BY連接兩個表的結果的GROUP BY(因此,即使您有三個“ Leader”記錄,您的查詢對於任何“ User”記錄仍然可以正常使用)
當然,如果您僅對“領導者”記錄感興趣,則應在以下情況下添加適當的條件:
select b.g_group, count(b.g_group)
from tablea a inner join tableb b on a.n_group = b.g_name
where b.g_group = 'Leader' -- >> or use b.id = 1 <<
group by b.g_group
此查詢將為您提供tableA
中'Leader'
的人數:
SELECT COUNT(*)
FROM tableA a
JOIN tableB b ON b.g_name = a.n_group
WHERE b.g_group = 'Leader'
輸出:
4
如果要計算tableA中有多少個領導者,則不需要tableB,因為您已經有ID,並且知道哪個ID是領導者。
SELECT count(n_group) AS CountOfLeaders
FROM [tableA] as a
WHERE a.n_group = 'S1' OR a.n_group = 'S2'
您的表B顯示S1和S2 ID為領導者。
您甚至可以在沒有where子句的情況下做到這一點,而在用例時使用case。
SELECT count(case when a.n_group = 'S1' OR
a.n_group = 'S2'
then 1 else NULL end) AS CountOfLeaders
FROM [tableA] as a
有很多方法可以做到這一點。 您可以加入另一個表並使用ID = 1
或在其中g_name IN('S1','S2')
。 但是,您選擇真正做到這一點。
引用tableB的另一個示例:
SELECT count(n_group) AS CountOfLeaders
FROM [tableA] as a
INNER JOIN tableB b ON a.n_group = b.g_name
WHERE b.id = 1
使用下面的查詢,
SELECT COUNT(A.*) FROM tableA A
INNER JOIN tableB B ON A.n_group = B.g_name
WHERE B.g_name IN ('S1', 'S2')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.