[英]SQL SUM of one tables based on two values
If possible some help with the following question. 如果可能的话,以下问题会有所帮助。 I need to make a margin analyses. 我需要进行余量分析。 This I can do with one table and in the table both Cost as Turnover are mentioned. 我可以用一个表来做,在表中同时提到了“营业额”。 Via the ordernumber I would like to connect the cost and turnover of one ordernumber. 我想通过订单号连接一个订单号的成本和营业额。
Via this query I get the Turnover(omzet) 通过此查询,我得到了营业额(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
Via this query I get the cost(kostprijs) 通过此查询,我得到了成本(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
My wished result are the following columns; 我希望得到的结果是以下几列; Ordernumber, Turnover, cost 订单号,营业额,成本
Please give direction. 请指示。 At the moment I am lost. 此刻我迷路了。
No need to use a join here, this should give you what you want: 无需在此处使用联接,这应该可以为您提供所需的信息:
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
There may be a way to combine the results and avoid the sub queries. 可能有一种方法可以合并结果并避免子查询。 I've not given it the needed thought. 我没有给出需要的想法。 This is the simplest approach that is easy to understand; 这是最简单易懂的方法。 without rewriting both queries. 而不重写两个查询。
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
Thank you for helping. 感谢您的帮助。 Suddenly I had a other thougt and used the code below. 突然之间,我又有了另一个想法,并使用了下面的代码。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.