SQL选择语句,求和函数在哪里

时间:2014-03-25 09:26:08

标签: sql sql-server tsql sum where

我有一张桌子上有很多账单。而且我需要选择票据超出价格的账单中的项目。

我试过了:

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子句中,只有在那之后我才应该对它们进行分组。

我该怎么办?

3 个答案:

答案 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