2013-10-28 147 views
1

我有如下表:分組按列名計數的數據

  1. QuranMaster

enter image description here

2.QuranPrayed

enter image description here

我只是想擁有所有siparas和t這裏算作結果。

手段預期結果如下:

Sipara1  3 
Sipara2  2 
.. 
.. 
.. 

Sipara1是3,因爲它在QuranPrayed到達3倍。

我提出以下查詢:

select qm.sipara,COUNT(qp.Sipara) from QuranMaster qm,QuranPrayed qp 
where qp.sipara=qm.sipara 
group by qm.sipara 

此查詢的工作時QuranPrayed具有價值完全正確的。

但是當QuaranPrayed沒有值時,它不顯示我的結果。

我的期望是:

Sipara1  0 
Sipara2  0 
.. 
.. 
.. 

請幫助我。

回答

4

您需要使用LEFT JOIN:

SELECT qm.sipara, Prayed = COUNT(qp.Sipara) 
FROM QuranMaster qm 
     LEFT JOIN QuranPrayed qp 
      ON qp.sipara=qm.sipara 
GROUP BY qm.sipara; 

值得注意的是,你已經使用了隱式連接語法是超過20歲,在ANSI 92被替代爲明確連接。 This article by Aaron Bertrand提出了一些非常有效的理由來切換到更新的語法。可能最適合你的是使用LEFT JOIN。以前在SQL-Server的查詢將是:

select qm.sipara,COUNT(qp.Sipara) 
from QuranMaster qm,QuranPrayed qp 
where qp.sipara=*qm.sipara 
group by qm.sipara 

但是不贊成這種方式,你可能會得到以下錯誤:

The query uses non-ANSI outer join operators ("*=" or "=*"). To run this query without modification, please set the compatibility level for current database to 80, using the SET COMPATIBILITY_LEVEL option of ALTER DATABASE. It is strongly recommended to rewrite the query using ANSI outer join operators (LEFT OUTER JOIN, RIGHT OUTER JOIN). In the future versions of SQL Server, non-ANSI join operators will not be supported even in backward-compatibility modes.

+0

thanx,爲我工作。 –

1
select qm.sipara, COUNT(qp.Sipara) ReadSparas 
from QuranMaster qm LEFT JOIN QuranPrayed qp 
ON qp.sipara=qm.sipara 
group by qm.sipara 
+2

你如何總結一(VAR)字符? –

+0

我以爲有一個列的數量被讀取。 –

+0

數據庫顯然是s bro兄弟... –