我是 SQL 的新手。这就是我正在尝试的。
表:h_invoices
样品
InvNo (AI) | 邀请客户 | 总投资 | InvPayment |
---|---|---|---|
18 | 富 | 6750 | 6750 |
19 | 酒吧 | 3300 | 3300 |
表:h_invdetail
样品
indID (AI) | 无效ID | 产品编号 | 单位费率 |
---|---|---|---|
18 | 18 | 1 | 3800 |
19 | 18 | 5 | 2950 |
我想是的计数ProductA
,ProductB
所以基于ProductID
和totalRevenue
是sum(InvTotal)
。
我已经尝试过,例如在InvNo - 18 的情况下:
SELECT
sum(case when h_invdetail.ProductId = 1 then 1 else 0 end) as ProductA,
sum(case when h_invdetail.ProductId = 6 then 1 else 0 end) as ProductB,
sum(case when h_invdetail.ProductId = 3 then 1 else 0 end) as ProductC,
sum(h_invoices.InvTotal) as REVENUE
FROM h_invdetail
LEFT JOIN h_invoices ON h_invdetail.invID = h_invoices.InvNo
WHERE h_invoices.InvNo = 18
我得到的总和为13500而不是6750。这只是例如,我必须获得整个表的收入和产品分布,但我得到了错误的sum(h_invoices.InvTotal)
. 我错过了什么吗?
那么您真正需要的是将两个查询合二为一。您获取所有发票总数的第一部分,使其成为仅返回单个记录的子查询。然后是第二个子查询,它只是您的发票 #18,它将返回一条记录,然后从每个记录中提取列。由于每个表中的结果为 1:1,因此您无需显式连接即可
select
PQ1.Revenue,
PQ2.ProductA,
PQ2.ProductB,
PQ2.ProductC
from
( SELECT sum (i.InvTotal) as Revenue
FROM h_invoices i ) PQ1,
( select
sum(case when d.ProductId = 1 then 1 else 0 end) as ProductA,
sum(case when d.ProductId = 6 then 1 else 0 end) as ProductB,
sum(case when d.ProductId = 3 then 1 else 0 end) as ProductC
from h_invdetail d
WHERE d.InvNo = 18 ) PQ2
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句