我正在为 Crystal Report 应用程序编写 SP,我的经理告诉我在计算非重复计数时我有一个错误。基本上,我在一家初创的批发鱼类竞价平台工作,我正在编写我的 SP,这样我就可以从数据库中检索数据。数据库有一个表,其中包含我需要计算总和的所有模块,并对将在月度统计报告中显示的不同字段进行计数。我将链接我的 SP 和表格的屏幕截图,以便您可以更好地了解我正在处理的内容。我似乎没有正确理解的两个字段是(“卖家总数”和“交易总数”)交易我的意思是出价交易。
ALTER PROCEDURE [dbo].[cryrptTotals]
@start_date datetime,
@end_date datetime
AS
BEGIN
SET NOCOUNT ON;
SELECT
COUNT(DISTINCT CASE WHEN items.status = 'BIDDING_DONE' THEN items.buyer_id END) as buyer_count,
COUNT(DISTINCT case when items.status = 'BIDDING_DONE' THEN items.seller_id END) as seller_count,
CAST(COUNT(CASE WHEN items.status != 'CANCEL' THEN items.bid_amount END) AS decimal(18,2)) as total_completed_transactions,
--would love to remember separating them according to the number of the logical parts (count and sum) for more efficient and add index to item.status
SUM(CASE WHEN items.status = 'BIDDING_DONE' THEN items.commission_on_price END) as commission_sum,
SUM(CASE WHEN items.status ='BIDDING_DONE' THEN items.sale_price END) / SUM(CASE WHEN items.status ='BIDDING_DONE' THEN items.weight END) AS sale_price_avg,
SUM(CASE WHEN items.status = 'BIDDING_DONE' THEN items.weight END) as Total_sold_weight,
SUM(items.weight) as Listed_weight,
SUM(CASE WHEN items.status = 'BIDDING_DONE' THEN items.sale_price END) AS total_sold_value
FROM [BEHAR_MARKET_PROD].[dbo].[items]
INNER JOIN [BEHAR_MARKET_PROD].[dbo].[item_bids] ON items.id = item_bids.item_id
WHERE items.market_id = 1 AND CONVERT(date, items.created_at) BETWEEN CONVERT(date, @start_date) AND CONVERT(date, @end_date)
END
我试图在不同的程序中将总和和计数分开,我尝试处理可能属于以下状态描述的状态案例('BIDDING_DONE' - 'EXPIRED' - 'ACTIVE' - 'SAVE' - '不活动')。对我来说最有意义的是 [status != 'EXPIRED'] ,这将使它选择所有其余的。我认为结果中存在某种重复,但我不确定。