2015-07-21 61 views
0

如果可能,有一些幫助解決以下問題。我需要做一個保證金分析。我可以用一個表格和表格中的成本作爲營業額提及。通過訂單號我想連接一個訂單號的成本和營業額。基於兩個值的一個表的SQL SUM

通過這個查詢我得到的營業額(omzet)

select GBK.bkstnr_sub as Ordernummer, 
     SUM(GBK.bdr_hfl*-1) as Omzet 
from [040].dbo.gbkmut as GBK with (nolock) 
where (GBK.dagbknr = 50 or GBK.dagbknr = 40)and (GBK.reknr BETWEEN '  8000' AND '  8980') 
and GBK.bkstnr_sub in (Select ORK.ordernr from [040].dbo.orkrg as ORK with (nolock) 

where ORK.ord_soort = 'V' and ORK.status = 'A' and YEAR(ork.orddat)= '2014') 

GROUP BY GBK.bkstnr_sub 

通過這個查詢我得到的費用(kostprijs)

select GBK.bkstnr_sub as Ordernummer, 
     SUM(GBK.bdr_hfl*-1) as Omzet 

from [040].dbo.gbkmut as GBK with (nolock) 

where (GBK.dagbknr = 50 or GBK.dagbknr = 40)and (GBK.reknr BETWEEN '  7000' AND '  8980') 
and GBK.bkstnr_sub in (Select ORK.ordernr from [040].dbo.orkrg as ORK with (nolock) 

where ORK.ord_soort = 'V' and ORK.status = 'A' and YEAR(ork.orddat)= '2014') 

GROUP BY GBK.bkstnr_sub 

我希望結果是以下幾列;訂單編號,營業額,成本

請給出方向。此刻我迷路了。

+0

查看[本文](http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/)使用維恩圖來描述連接是如何工作的。如果將每個查詢視爲內聯視圖(以表格形式閱讀)並將它們結合在一起,則可以獲得所需的結果。 – xQbert

回答

1

無需使用這裏加入,這應該給你想要的東西:

select bkstnr_sub as Ordernummer, 
     SUM(case when reknr BETWEEN '  8000' AND '  8980' then GBK.bdr_hfl * -1 end) as Omzet, 
     SUM(case when reknr BETWEEN '  7000' AND '  8980' then GBK.bdr_hfl * -1 end) as kostprijs 
from [040].dbo.gbkmut 
where (dagbknr = 50 or dagbknr = 40) and 
     bkstnr_sub in (
      Select ordernr 
      from [040].dbo.orkrg 
      where ord_soort = 'V' and 
        status = 'A' and 
        YEAR(orddat)= '2014') 
GROUP BY bkstnr_sub 
+0

謝謝您的回覆 – Erwin

0

有可能是合併的結果,避免子查詢的方式。我沒有給出它需要的想法。這是最容易理解的最簡單的方法;而不用重寫這兩個查詢。

SELECT Turnover.OrderNummer, 
    TurnOver.omzet as TurnoverOmzet, 
    Cost.Omzet as CostOmzet 
FROM 
    (SELECT GBK.bkstnr_sub as Ordernummer, 
      SUM(GBK.bdr_hfl*-1) as Omzet 
    FROM [040].dbo.gbkmut as GBK with (nolock) 
    WHERE (GBK.dagbknr = 50 or GBK.dagbknr = 40) 
     and (GBK.reknr BETWEEN '  8000' AND '  8980') 
     and GBK.bkstnr_sub in 
      (SELECT ORK.ordernr 
      FROM [040].dbo.orkrg as ORK with (nolock) 
      WHERE ORK.ord_soort = 'V' 
      and ORK.status = 'A' 
      and YEAR(ork.orddat)= '2014') 
    GROUP BY GBK.bkstnr_sub) as turnover 
INNER JOIN 
    (SELECT GBK.bkstnr_sub as Ordernummer, 
      SUM(GBK.bdr_hfl*-1) as Omzet 
    FROM [040].dbo.gbkmut as GBK with (nolock) 
    WHERE (GBK.dagbknr = 50 or GBK.dagbknr = 40) 
     and (GBK.reknr BETWEEN '  7000' AND '  8980') 
     and GBK.bkstnr_sub in 
     (SELECT ORK.ordernr 
     FROM [040].dbo.orkrg as ORK with (nolock) 
     WHERE ORK.ord_soort = 'V' 
      and ORK.status = 'A' 
      and YEAR(ork.orddat)= '2014') 
    GROUP BY GBK.bkstnr_sub) as Cost 
ON Turnover.orderNummer = Cost.orderNummer 
+0

謝謝您的回覆 – Erwin

0

謝謝你的幫助。突然之間我有一個其他thougt並使用下面的代碼。

select GBK.bkstnr_sub as Ordernummer, 
     SUM(GBK.bdr_hfl*-1) as Omzet, 
     SUM(GBKK.bdr_hfl) as Kostprijs 

from [040].dbo.gbkmut as GBK with (nolock) 

JOIN 

      (select GBKK.bkstnr_sub,  
        GBKK.bdr_hfl 

      from [040].dbo.gbkmut as GBKK with (nolock) 
      where (GBKK.dagbknr = 50 or GBKK.dagbknr = 40)and GBKK.reknr BETWEEN '  7000' AND '  7980' 
      and GBKK.bkstnr_sub in (Select ORK.ordernr from [040].dbo.orkrg as ORK with (nolock) 

      where ORK.ord_soort = 'V' and ORK.status = 'A' and YEAR(ork.orddat)= '2014')) as GBKK 
on GBK.bkstnr_sub = GBKK.bkstnr_sub 
相關問題