2013-10-24 51 views
0

下面的查詢下,找到在SQL Server列的計數會給我的出版物數量爲每個庫不同條件

Select lib.Name, COUNT(pub.Id) From Library lib 
INNER JOIN Publication lib.ID = pub.FK_Library_Id 

但是,在發佈的表,我有免費出版物和付費出版物和我想的數付費出版物和免費出版物。

下面的查詢給我的結果

Select lib.Name, COUNT(pub.Id), COUNT(pub1.Id) as 'Paid Publication COunt', 
COUNT(pub2.Id) as 'FreePublication COunt' 
From Library lib 
INNER JOIN Publication pub ON lib.ID = pub.FK_Library_Id 
LEFT JOIN Publication pub1 ON lib.ID = pub1.FK_Library_Id and pub1.Price > 0 
LEFT JOIN Publication pub2 ON lib.ID = pub2.FK_Library_Id and pub2.Price =0 

但是,這是在增加了兩個連接,這是不是最優化的成本。

如何以更有效和最優化的方式編寫上述查詢。

感謝

回答

1

也許你可以使用帶有CASE語句的總和,如下所示:

Select lib.Name, COUNT(*), 
SUM(CASE WHEN pub.Price > 0 THEN 1 ELSE 0 END) as 'Paid Publication COunt', 
SUM(CASE WHEN pub.Price = 0 THEN 1 ELSE 0 END) as 'FreePublication COunt' 
From Library lib 
INNER JOIN Publication pub ON lib.ID = pub.FK_Library_Id 
Group By lib.Name 
+0

精彩。有效 – Marcus25