我有查询由下面的一个产品项目来计算总金额:计算COUNT BY SQL查询
SELECT p.[Id], COUNT(o.[Id]), SUM(o.[Amount])
FROM [dbo].[Order] o
INNER JOIN [dbo].[Product] p ON p.[Id] = o.[ProductId]
GROUP BY p.[Id]
在这种情况下,COUNT(。问题o [ID])是唯一的订单数由一个产品项目。
,而不是计数,但(问题o [ID])我想用计算公式旁边的订单号:
COUNT(o.[OwnerId]) -- where o.[OwnerId] IS NOT NULL
+
COUNT(o.[Id]) -- where o.[OwnerId] IS NULL
我能实现它在一个查询?哪种解决方案对性能更好?
更新:
我很抱歉我的快速完成。 Mahmoud Gamal提供了很好的例子,但它计算了一点。
SELECT
p.[Id],
COUNT(DISTINCT CASE WHEN o.[OwnerId] IS NOT NULL THEN o.[OwnerId] ELSE NULL END) AS [NumberOfOrderOwners],
SUM(CASE WHEN o.[OwnerId] IS NULL THEN 1 ELSE 0 END) AS [NumberOfAnonimousOwners],
SUM(o.[Amount])
FROM [dbo].[Order] o
INNER JOIN [dbo].[Product] p ON p.[Id] = o.[ProductId]
GROUP BY p.[Id]
上面的查询按照我的需要进行计算,但是由于我在COUNT里面使用了DISTINCT,所以估计成本增加了两倍。
有人能帮我改进我的查询吗?
所以你试过只使用'+'? – zerkms 2013-03-28 08:55:06