2013-10-24 45 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