我有一张桌子上有很多账单。而且我需要选择票据超出价格的账单中的项目。
我试过了:
SELECT d.BillNumber
, SUM(d1.Amount* d1.Price)
, d2.Name AS FinalPrice
FROM GEMsc106Antet d LEFT OUTER JOIN GEMsc106Pozitii d1
ON d1.Luna = d.Luna AND d1.NumarI = d.NumarI
JOIN GEcProduse d2 ON d2.Cod = d1.CodMaterial
WHERE YEAR(d.Data) = 2013
GROUP BY d.BillNumber , d2.Name
HAVING SUM(d1.Amount* d1.Price) >= 10000
但是这句话似乎没有做到这一点,因为首先它只选择我2013年的账单,这是好的,但后来我应该得到所有大于10.000的账单,我不能用这笔钱在where子句中,只有在那之后我才应该对它们进行分组。
我该怎么办?
答案 0 :(得分:1)
您可能不希望将所有逻辑塞入一个select
。尝试with
构建:
with data as (
-- Your preliminary data: cheques (?) with bill sum and the actual price
select d.BillNumber as BillNumber,
sum(d1.Amount * d1.Price) as Bill,
d2.Name as Price
from GEMsc106Antet d
left join
GEMsc106Pozitii d1 on d1.Luna = d.Luna and d1.NumarI = d.NumarI
join
GEcProduse d2 on d2.Cod = d1.CodMaterial
where Year(d.Data) = 2013
group by d.BillNumber,
d2.Name)
-- Final query: just use appropriate where condition
select *
from data
where Bill > Price
答案 1 :(得分:0)
这仅在BillNumber和d2.Name是唯一的时才有效:
SELECT d.BillNumber
, d1.Amount* d1.Price
, d2.Name AS FinalPrice
FROM GEMsc106Antet d
LEFT OUTER JOIN GEMsc106Pozitii d1
ON d1.Luna = d.Luna AND d1.NumarI = d.NumarI
JOIN GEcProduse d2
ON d2.Cod = d1.CodMaterial
WHERE YEAR(d.Data) = 2013 AND (d1.Amount* d1.Price) >= 10000
答案 2 :(得分:0)
我设法解决查询看起来像这个问题
Select x.Name
from GECProduse x
join GEMSc106Pozitii p on x.Cod= p.CodMaterial
join (Select d.Month, d.NumarI from GeMsc106Antet d
join GEMsc106Pozitii d1 on d.Month= d1.Month and d.NumarI=d1.NumarI
WHERE YEAR(d.Data) = 2013
GROUP by d.Numar,d.Month, d.NumarI HAVING sum(d1.Quantity*d1.SellingPrice) >= 10000) p1 on p1.Month=p.Month and p1.NumarI=p.NumarI
GROUP BY x.Name