我有一个查询,我正在处理,对于销售表中的每个给定月份和年份,返回订购总项目的SUM()以及订购项目的不同帐户数量和一对夫妇在各种产品类型上分解了SUm()。请参阅下面的查询以获取示例:
SELECT
YearReported,
MonthReported,
COUNT(DISTINCT DiamondId) as Accounts,
SUM(Quantity) as TotalUnitsOrdered,
SUM(CASE P.ProductType WHEN 1 THEN Quantity ELSE 0 END) as MonthliesOrdered,
SUM(CASE P.ProductType WHEN 1 THEN 0 ELSE Quantity END) as TPBOrdered
FROM
RetailOrders R WITH (NOLOCK)
LEFT JOIN
Products P WITH (NOLOCK) ON R.ProductId = P.ProductId
GROUP BY
YearReported, MonthReported
我现在面临的问题是,我还需要根据数据集中的另一个字段来计算不同帐户的数量。例如:
SELECT
YearReported,
MonthReported,
COUNT(DISTINCT DiamondId) as Accounts,
SUM(Quantity) as TotalUnitsOrdered,
SUM(CASE P.ProductType WHEN 1 THEN Quantity ELSE 0 END) as MonthliesOrdered,
SUM(CASE P.ProductType WHEN 1 THEN 0 ELSE Quantity END) as TPBOrdered,
SUM(CASE IsInitial WHEN 1 THEN Quantity ELSE 0 END) as InitialOrders,
SUM(CASE IsInitial WHEN 0 THEN Quantity ELSE 0 END) as Reorders,
COUNT(/*DISTINCT DiamndId WHERE IsInitial = 1 */) as InitialOrderAccounts
FROM
RetailOrders R WITH (NOLOCK)
LEFT JOIN
Products P WITH (NOLOCK) ON R.ProductId = P.ProductId
GROUP BY
YearReported, MonthReported
显然,我们会将最后一个SUM中的注释部分替换为不会引发错误的部分。我刚才补充说明了这一点。
我觉得这可以使用SQL中的分区方法来完成,但我必须承认我对它们不是很好,并且无法弄清楚如何做到这一点。昨晚在阅读它之后,分享在线的MS文档真的让我头疼。
编辑:我错误地将最后一个聚合函数作为总和,我的意思是它是一个COUNT()。
为了帮助澄清,COUNT(DISTINCT DiamondId)
将返回集合中所有唯一DiamondId值的计数,但我还需要获取集合中所有Unique Diamond Id值的COUNT(),其中对应的IsInitial标志设置为1
答案 0 :(得分:1)
只是将那些没有资格的人归零:
count(distinct
case
when IsInitial = 1 then DiamndId
/* else null */
end
)