我有兩個這樣的表。查詢計數條目
A B
1 12
2 13
3 12
4 13
5 15
B C
12 APPLE
13 ORANGE
14 MANGO
15 BANANA
我需要如下輸出...
count(A) B C
2 12 APPLE
2 13 ORANGE
0 14 MANGO
1 15 BANANA
我寫使用查詢連接,但我停留在空值時,顯示計數爲零。
我有兩個這樣的表。查詢計數條目
A B
1 12
2 13
3 12
4 13
5 15
B C
12 APPLE
13 ORANGE
14 MANGO
15 BANANA
我需要如下輸出...
count(A) B C
2 12 APPLE
2 13 ORANGE
0 14 MANGO
1 15 BANANA
我寫使用查詢連接,但我停留在空值時,顯示計數爲零。
使用left join
得到的table2
值即使有沒有爲他們記錄table1
select T2.B, T2.C, count(T1.A)
from table2 T2
left join table1 T1 on T1.B = T2.B
group by T2.B, T2.C
試試這個:
SELECT COUNT(T1.A) as Cnt,T2.B,T2.C
FROM Table2 T2 LEFT JOIN
Table1 T1 ON T1.B=T2.B
GROUP BY T2.B,T2.C
結果:
CNT B C
2 12 APPLE
1 15 BANANA
0 14 MANGO
2 13 ORANGE
見導致SQL Fiddle。
DECLARE @TABLE1 TABLE (A INT, B INT)
INSERT INTO @TABLE1 VALUES
(1, 12),
(2, 13),
(3, 12),
(4, 13),
(5, 15)
DECLARE @TABLE2 TABLE (B INT, C VARCHAR(20))
INSERT INTO @TABLE2 VALUES
(12,'APPLE'),
(13,'ORANGE'),
(14,'MANGO'),
(15,'BANANA')
SELECT t2.C
,ISNULL(COUNT(t1.B), 0) total_Count
FROM @TABLE2 t2 LEFT JOIN @TABLE1 t1
ON t2.B = t1.B
GROUP BY t2.C
C total_Count
APPLE 2
BANANA 1
MANGO 0
ORANGE 2
只是給你另一種選擇。您不需要連接,因爲您只想顯示table2記錄以及可以在子查詢中獲得的另一個值。
select (select count(*) from table1 where table1.B = table2.B) as cnt, B, C
from table2
order by B;
還有其他的方法來做到這一點(使用子查詢),但我會用這個下列操作之一:
-- SETUP
CREATE TABLE #TABLE1 (A INT, B INT);
CREATE TABLE #TABLE2 (B INT, C CHAR(10));
INSERT #TABLE1
SELECT 1, 12 UNION ALL
SELECT 2, 13 UNION ALL
SELECT 3, 12 UNION ALL
SELECT 4, 13 UNION ALL
SELECT 5, 15
INSERT #TABLE2
SELECT 12, 'APPLE' UNION ALL
SELECT 13, 'ORANGE' UNION ALL
SELECT 14, 'MANGO' UNION ALL
SELECT 15, 'BANANA'
-- query
SELECT COUNT(qty.A), dsc.B, dsc.C
FROM #TABLE2 dsc
LEFT JOIN #TABLE1 qty ON (dsc.B = qty.B)
GROUP BY dsc.B, dsc.C
ORDER BY dsc.B, dsc.C;
你忘了添加GROUP BY子句。 –
我是唯一一個仍然喜歡在連接中看到'OUTER'以完整性的人嗎?我必須變老,乖乖或什麼。 –