【发布时间】:2021-06-19 13:56:26
【问题描述】:
我有以下代码。
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 |
每次我尝试加入表格时,数据都会变得疯狂并且非常错误!
感谢您的帮助!
这是我得到的输出数据示例:
表一:
| 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 |
表 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
【问题讨论】:
-
“数据变得疯狂并且非常错误”。请提供关于错误的具体详细信息
-
请提供样本数据并简要说明您的需求。
-
你好两个,我已经在我的问题中添加了更多内容,希望这会有所帮助:)
-
假设一个销售人员在历史表中可以有很多销售。同样,他们可以有许多未结订单。所以你有一个多对多的关系,你的行在连接中成倍增加。要解决此问题,请在子查询中进行分组。
-
@HoneyBadger 是对的,您不能只在整个集合上使用
GROUP BY,删除 group 子句以查看它正在操作的所有行。子查询、交叉应用和/或窗口函数可以在这里为您提供帮助。
标签: sql sql-server-2014