2017-03-29 2 views
1

이 SQL 쿼리는 가장 중요한 기능이 총 판매액을 반환하는 것이므로 SUM(gop.quantity)입니다. 나는이 숫자에 대한 비율을 보여주고 싶다.SQL Server 쿼리에서 백분율 백분율

  • unitsSold : 2 - 비율 : 20 %
  • unitsSold : 4 - 비율 : 40 %
  • unitsSold 같은 - 쿼리가 다음 3 개 행을 반환하는 경우 그것은 그 옆에 백분율을 표시해야합니다 : 6 - 비율 : 60 %

검색어 :

SELECT TOP 20 
    p.productid, 
    SUM(gop.quantity) AS unitsSold, 
    SUM(gop.price * gop.quantity) AS grossSales, 
    p.productName, gop.picid, gop.picUrl 
FROM 
    product AS p 
LEFT JOIN 
    orderdetail AS gop ON gop.productid = p.productId 
LEFT JOIN 
    Orders AS hedgo ON hedgo.orderid = gop.orderid 
WHERE 
    EXISTS (SELECT * FROM orderdetail AS op 
      WHERE op.orderid = hedgo.orderid) 
GROUP BY 
    p.productid, p.productName, gop.picid, gop.picUrl 
ORDER BY 
    unitsSold DESC 

가 어떻게 내 SQL 쿼리에서이 작업을 수행 할 수 있습니까?

+0

백분율에 대한 공식은 무엇입니까? unitsSold/totalUnitsSold? –

+0

예 그 공식입니다. –

답변

0

당신은 총을 얻을 수 over()sum()를 사용할 수 있습니다

select top 20 p.productid 
, SUM(gop.quantity) as unitsSold 
, SUM(gop.quantity+.0)/sum(SUM(gop.quantity)) over() as Percentage 
, SUM(gop.price * gop.quantity) as grossSales 
, p.productName 
, gop.picid 
, gop.picUrl 
from product as p 
    left join orderdetail as gop 
    on gop.productid = p.productId 
    left join Orders as hedgo 
    on hedgo.orderid = gop.orderid 
where exists (
    select * 
    from orderdetail as op 
    where op.orderid = hedgo.orderid 
) 
group by p.productid 
, p.productName 
, gop.picid 
, gop.picUrl 
order by unitsSold desc 

내가 quantityint 경우 분할 작업이, int 대신 decimal을 반환되도록 sum(gop.quantity)+.0을 추가했다.