加入额外的 table 而不聚合对重复值求和
Join to additional table without aggregates summing the duplicated values
我有以下代码。
Select t.Salesperson_Invoiced,
Sum(Case When month(t.TranDate) = Month(getdate()) Then t.NetNet_Revenue_Func End) MTD_REV,
Sum(Case When month(t.TranDate) = Month(getdate()) Then t.GM_Func_Net End) MTD_GM,
SUM (Case When t.Year = Year(getdate()) Then t.NetNet_Revenue_Func End) YTD_REV,
SUM (Case When t.Year = Year(getdate()) Then t.GM_Func_Net End) YTD_GM
From Sales_History t
Where t.PG1 = 'Lighting'
And t.Office = 'AU'
And t.Year = Year(getdate())
Group By t.Salesperson_Invoiced
我可以添加以下内容吗
SELECT Salesperson_1,sum(Value_Func) as BO_AUD
FROM Datawarehouse.dbo.Open_Orders
where Office = 'AU' and PG1 = 'Lighting'
group by Salesperson_1
Salesperson_1 和 Salesperson_Invoiced 是可加入的字段:)
所以我可以让它看起来像这样?
Salesperson_Invoiced
NetNet_Revenue_Func MTD
NetNet_Revenue_Func YTD
GM_Func_Net MTD
GM_Func_Net YTD
BO_AUD
James
500
100
John
600
200
Peter
700
300
Harry
800
400
Potter
900
1
每次我尝试加入表格时,数据都会变得异常,而且是非常错误的!
感谢您的帮助!
这是我得到的输出数据示例:
Table一个:
Salesperson_Invoiced
NetNet_Revenue_Func MTD
NetNet_Revenue_Func YTD
GM_Func_Net MTD
GM_Func_Net YTD
James
500
1000
250
500
Harry
600
1200
300
600
Potter
700
1400
350
700
Table 2
Salesperson_Invoiced
BO_AUD
James
500000
Harry
600000
Potter
700000
这就是我想要实现的目标:
Salesperson_Invoiced
NetNet_Revenue_Func MTD
NetNet_Revenue_Func YTD
GM_Func_Net MTD
GM_Func_Net YTD
BO_AUD
James
500
1000
250
500
500000
Harry
600
1200
300
600
600000
Potter
700
1400
350
700
700000
我尝试使用的代码是
Select distinct t.Salesperson_Invoiced,
Sum(Case When month(t.TranDate) = Month(getdate()) Then t.NetNet_Revenue_Func End) MTD_REV,
Sum(Case When month(t.TranDate) = Month(getdate()) Then t.GM_Func_Net End) MTD_GM,
SUM (Case When t.Year = Year(getdate()) Then t.NetNet_Revenue_Func End) YTD_REV,
SUM (Case When t.Year = Year(getdate()) Then t.GM_Func_Net End) YTD_GM,
sum(Value_Func) as BO_AUD
From Sales_History t
inner join Open_Orders on
t.Salesperson_Invoiced = Open_Orders.Salesperson_1
Where t.PG1 = 'Lighting'
And t.Office = 'AU'
And t.Year = Year(getdate())
Group By t.Salesperson_Invoiced,Salesperson_1
但是当我尝试使用它时
A) 来自其中一个 MTD 的真实数据从 6586.00 变为 111962.00
B) BO_AUD 对于同一个人吹出到 10907652.210 应该是 119374.310
聚合加入之前:
select sh.*, oo.*
from (Select sh.Salesperson_Invoiced,
Sum(Case When month(sh.TranDate) = Month(getdate()) Then sh.NetNet_Revenue_Func End) MTD_REV,
Sum(Case When month(sh.TranDate) = Month(getdate()) Then sh.GM_Func_Net End) MTD_GM,
SUM (Case When sh.Year = Year(getdate()) Then sh.NetNet_Revenue_Func End) YTD_REV,
SUM (Case When sh.Year = Year(getdate()) Then sh.GM_Func_Net End) YTD_GM
From Sales_History sh
Where sh.PG1 = 'Lighting' AND
sh.Office = 'AU' AND
sh.Year = Year(getdate())
Group By sh.Salesperson_Invoiced
) sh left join
(SELECT Salesperson_1, sum(Value_Func) as BO_AUD
FROM Datawarehouse.dbo.Open_Orders
where Office = 'AU' and PG1 = 'Lighting'
group by Salesperson_1
) oo
on sh.Salesperson_Invoiced = oo.Salesperson_1
看起来像 APPLY
的情况,尽管它也可以作为 CTE/derived table.[ 的连接来完成=17=]
Select t.Salesperson_Invoiced,
Sum(Case When month(t.TranDate) = Month(getdate()) Then t.NetNet_Revenue_Func End) MTD_REV,
Sum(Case When month(t.TranDate) = Month(getdate()) Then t.GM_Func_Net End) MTD_GM,
SUM (Case When t.Year = Year(getdate()) Then t.NetNet_Revenue_Func End) YTD_REV,
SUM (Case When t.Year = Year(getdate()) Then t.GM_Func_Net End) YTD_GM,
o.BO_AUD
From Sales_History t
OUTER APPLY (
SELECT SUM(o.Value_Func) as BO_AUD
FROM Open_Orders o
WHERE t.Salesperson_Invoiced = o.Salesperson_1
) o
Where t.PG1 = 'Lighting'
And t.Office = 'AU'
And t.Year = Year(getdate())
Group By t.Salesperson_Invoiced, o.BO_AUD;
备注:
APPLY
的结果进入 GROUP BY
,因为它已经针对每个 Salesperson_Invoiced
分组
- 我建议您找到一种更好的按日期过滤的方法。为了使用索引,您不能在列上使用函数。所以不用
month(t.TranDate) = Month(getdate())...
使用 t.TranDate >= DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1) AND t.TranDate < DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()) + 1, 1)
我有以下代码。
Select t.Salesperson_Invoiced,
Sum(Case When month(t.TranDate) = Month(getdate()) Then t.NetNet_Revenue_Func End) MTD_REV,
Sum(Case When month(t.TranDate) = Month(getdate()) Then t.GM_Func_Net End) MTD_GM,
SUM (Case When t.Year = Year(getdate()) Then t.NetNet_Revenue_Func End) YTD_REV,
SUM (Case When t.Year = Year(getdate()) Then t.GM_Func_Net End) YTD_GM
From Sales_History t
Where t.PG1 = 'Lighting'
And t.Office = 'AU'
And t.Year = Year(getdate())
Group By t.Salesperson_Invoiced
我可以添加以下内容吗
SELECT Salesperson_1,sum(Value_Func) as BO_AUD
FROM Datawarehouse.dbo.Open_Orders
where Office = 'AU' and PG1 = 'Lighting'
group by Salesperson_1
Salesperson_1 和 Salesperson_Invoiced 是可加入的字段:)
所以我可以让它看起来像这样?
Salesperson_Invoiced | NetNet_Revenue_Func MTD | NetNet_Revenue_Func YTD | GM_Func_Net MTD | GM_Func_Net YTD | BO_AUD |
---|---|---|---|---|---|
James | 500 | 100 | |||
John | 600 | 200 | |||
Peter | 700 | 300 | |||
Harry | 800 | 400 | |||
Potter | 900 | 1 |
每次我尝试加入表格时,数据都会变得异常,而且是非常错误的!
感谢您的帮助!
这是我得到的输出数据示例:
Table一个:
Salesperson_Invoiced | NetNet_Revenue_Func MTD | NetNet_Revenue_Func YTD | GM_Func_Net MTD | GM_Func_Net YTD |
---|---|---|---|---|
James | 500 | 1000 | 250 | 500 |
Harry | 600 | 1200 | 300 | 600 |
Potter | 700 | 1400 | 350 | 700 |
Table 2
Salesperson_Invoiced | BO_AUD |
---|---|
James | 500000 |
Harry | 600000 |
Potter | 700000 |
这就是我想要实现的目标:
Salesperson_Invoiced | NetNet_Revenue_Func MTD | NetNet_Revenue_Func YTD | GM_Func_Net MTD | GM_Func_Net YTD | BO_AUD |
---|---|---|---|---|---|
James | 500 | 1000 | 250 | 500 | 500000 |
Harry | 600 | 1200 | 300 | 600 | 600000 |
Potter | 700 | 1400 | 350 | 700 | 700000 |
我尝试使用的代码是
Select distinct t.Salesperson_Invoiced,
Sum(Case When month(t.TranDate) = Month(getdate()) Then t.NetNet_Revenue_Func End) MTD_REV,
Sum(Case When month(t.TranDate) = Month(getdate()) Then t.GM_Func_Net End) MTD_GM,
SUM (Case When t.Year = Year(getdate()) Then t.NetNet_Revenue_Func End) YTD_REV,
SUM (Case When t.Year = Year(getdate()) Then t.GM_Func_Net End) YTD_GM,
sum(Value_Func) as BO_AUD
From Sales_History t
inner join Open_Orders on
t.Salesperson_Invoiced = Open_Orders.Salesperson_1
Where t.PG1 = 'Lighting'
And t.Office = 'AU'
And t.Year = Year(getdate())
Group By t.Salesperson_Invoiced,Salesperson_1
但是当我尝试使用它时 A) 来自其中一个 MTD 的真实数据从 6586.00 变为 111962.00 B) BO_AUD 对于同一个人吹出到 10907652.210 应该是 119374.310
聚合加入之前:
select sh.*, oo.*
from (Select sh.Salesperson_Invoiced,
Sum(Case When month(sh.TranDate) = Month(getdate()) Then sh.NetNet_Revenue_Func End) MTD_REV,
Sum(Case When month(sh.TranDate) = Month(getdate()) Then sh.GM_Func_Net End) MTD_GM,
SUM (Case When sh.Year = Year(getdate()) Then sh.NetNet_Revenue_Func End) YTD_REV,
SUM (Case When sh.Year = Year(getdate()) Then sh.GM_Func_Net End) YTD_GM
From Sales_History sh
Where sh.PG1 = 'Lighting' AND
sh.Office = 'AU' AND
sh.Year = Year(getdate())
Group By sh.Salesperson_Invoiced
) sh left join
(SELECT Salesperson_1, sum(Value_Func) as BO_AUD
FROM Datawarehouse.dbo.Open_Orders
where Office = 'AU' and PG1 = 'Lighting'
group by Salesperson_1
) oo
on sh.Salesperson_Invoiced = oo.Salesperson_1
看起来像 APPLY
的情况,尽管它也可以作为 CTE/derived table.[ 的连接来完成=17=]
Select t.Salesperson_Invoiced,
Sum(Case When month(t.TranDate) = Month(getdate()) Then t.NetNet_Revenue_Func End) MTD_REV,
Sum(Case When month(t.TranDate) = Month(getdate()) Then t.GM_Func_Net End) MTD_GM,
SUM (Case When t.Year = Year(getdate()) Then t.NetNet_Revenue_Func End) YTD_REV,
SUM (Case When t.Year = Year(getdate()) Then t.GM_Func_Net End) YTD_GM,
o.BO_AUD
From Sales_History t
OUTER APPLY (
SELECT SUM(o.Value_Func) as BO_AUD
FROM Open_Orders o
WHERE t.Salesperson_Invoiced = o.Salesperson_1
) o
Where t.PG1 = 'Lighting'
And t.Office = 'AU'
And t.Year = Year(getdate())
Group By t.Salesperson_Invoiced, o.BO_AUD;
备注:
APPLY
的结果进入GROUP BY
,因为它已经针对每个Salesperson_Invoiced
分组
- 我建议您找到一种更好的按日期过滤的方法。为了使用索引,您不能在列上使用函数。所以不用
month(t.TranDate) = Month(getdate())...
使用t.TranDate >= DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1) AND t.TranDate < DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()) + 1, 1)