统计每个客户的初步和最终发票数量

问题描述 投票:0回答:1

我需要计算每个客户的初步和最终发票的数量 我用了这个,但总和总是 = 0

SELECT 
cust,
SUM(CASE WHEN typ = 'فاتورة عرض' THEN 1 ELSE 0 END) AS total_preliminary_invoices,
SUM(CASE WHEN typ = 'فاتورة نهائية' THEN 1 ELSE 0 END) AS total_final_invoices,
COUNT(*) AS total_invoices FROM 
dbo.invmang GROUP BY 
cust;

the code

the table

这是代码和表格的图片, 我的客户不仅有发票,而且每张发票的类型(初步或最终), 我为每个客户做报告,有多少张初步发票和多少张最终发票

sql
1个回答
0
投票

您的第一个计数计算的是“查看发票”的数量,这与初步发票不同,因此您在搜索中出现了拼写错误。在您的示例数据中,第二个文本没有匹配项可计入

typ
。然而,这不是一个打字错误问题,而是一个数据表示问题。您应该为类型创建一个表,其中包含一个 id 字段和另一个文本字段以及键。所以你的记录将如下所示:

insert into typs(id, label, code)
values
(1, '<arabic text1>', 'PRELIMINARY_INVOICE'),
(2, '<arabic text2>', 'FINAL_INVOICE');

然后你可以做这样的事情:

SELECT 
cust,
SUM(CASE WHEN typs.code = 'PRELIMINARY_INVOICE' THEN 1 ELSE 0 END) AS total_preliminary_invoices,
SUM(CASE WHEN typs.code = 'FINAL_INVOICE' THEN 1 ELSE 0 END) AS total_final_invoices,
COUNT(*) AS total_invoices FROM 
dbo.invmang
join dbo.typs
on dbo.invmang.typ = dbo.typs.id
GROUP BY 
cust;

因此,将来每当您更改这些标签时,您只会更改

typs
中的标签,并且每当您想要显示文本时,加入类型并获取标签。当然,不幸的是,您需要调整已经必须更改为数字的数据,并为每条记录提供正确的数据。

© www.soinside.com 2019 - 2024. All rights reserved.