【问题标题】:Combine SELECT statements with aggregates in each statement将 SELECT 语句与每个语句中的聚合结合起来
【发布时间】:2014-04-05 15:15:52
【问题描述】:

我想将 2 个有效的 sql 语句合并为一个,但我不知道如何完成。 我正在使用 excel/odbc,只能读取 MS SQL SERVER。

第一句话:

 SELECT CustomerLocal.LocalCustomerID, 
        Sum(Orders.OrdersEURO) AS 'Sum of OrdersEURO'
FROM MyDataBase.dbo.CustomerLocal CustomerLocal, 
     CopelandDatabase.dbo.Orders Orders
WHERE Orders.LocalCustomerID = CustomerLocal.LocalCustomerID 
      AND Orders.Plant = CustomerLocal.Plant 
      AND ((CustomerLocal.IntExtCust In ('E')))
GROUP BY CustomerLocal.LocalCustomerID
ORDER BY CustomerLocal.LocalCustomerID

第二个语句是:

SELECT Sales.LocalCustomerID, 
SUM (CASE WHEN Sales.DateOfInvoice BETWEEN{ts '2012-10-01 00:00:00'} AND {ts '2013-09-30 00:00:00'} 
THEN Sales.SalesEURO
ELSE 0
END) AS Sales2013 ,
SUM (CASE WHEN Sales.DateOfInvoice >= {ts '2013-10-01 00:00:00'}  
THEN Sales.SalesEURO
ELSE 0
END) AS SalesYearToDate
FROM "dbo"."Sales"
Where Sales.DateOfInvoice >= {ts '2012-10-01 00:00:00'}
Group By Sales.LocalCustomerID
ORDER BY Sales.LocalCustomerID

希望的结果(列):

LocalCustomerID, Sales2013, SalesYearToDate, Sum of OrdersEURO 

如何开始两者的整合组合?,目前我只是在excel和vlookup中运行其余的。

编辑:替换了第二条语句,抱歉错误。

【问题讨论】:

  • 这两个语句是一样的...!第二条sql语句是什么?
  • 我们从中获取 YTD 和 2013 年数据的列的名称是什么?你希望它在某个时候切换到 2014 年吗?提示:如果Sales2013被称为SalesFullYear会更好
  • Sales2013 和 SalesYearToDate 是从哪里来的?
  • 把陈述搞砸了,我应该多加注意的。非常抱歉。

标签: sql sql-server excel join aggregate-functions


【解决方案1】:

连接应该可以工作:

Select a.LocalCustomerID, b.Sales2013, b.SalesYearToDate, a.[Sum of OrdersEURO]
from
(
SELECT CustomerLocal.LocalCustomerID, 
       Sum(Orders.OrdersEURO) AS 'Sum of OrdersEURO'
FROM MyDataBase.dbo.CustomerLocal CustomerLocal, CopelandDatabase.dbo.Orders Orders
WHERE Orders.LocalCustomerID = CustomerLocal.LocalCustomerID AND Orders.Plant =   
CustomerLocal.Plant AND ((CustomerLocal.IntExtCust In ('E')))
GROUP BY CustomerLocal.LocalCustomerID
) a
JOIN
(
SELECT Sales.LocalCustomerID, 
SUM (CASE WHEN Sales.DateOfInvoice BETWEEN{ts '2012-10-01 00:00:00'} AND {ts '2013-09-30 00:00:00'} 
THEN Sales.SalesEURO
ELSE 0
END) AS Sales2013 ,
SUM (CASE WHEN Sales.DateOfInvoice >= {ts '2013-10-01 00:00:00'}  
THEN Sales.SalesEURO
ELSE 0
END) AS SalesYearToDate
FROM "dbo"."Sales"
Where Sales.DateOfInvoice >= {ts '2012-10-01 00:00:00'}
Group By Sales.LocalCustomerID
) b
ON a.LocalCustomerID=b.LocalCustomerID
ORDER BY a.LocalCustomerID

【讨论】:

  • 关键字“JOIN”附近的语法不正确,“b”附近的语法也不正确。
【解决方案2】:

尝试使用联合声明

SELECT CustomerLocal.LocalCustomerID, 
    Sum(Orders.OrdersEURO) AS 'Sum of OrdersEURO'
FROM MyDataBase.dbo.CustomerLocal CustomerLocal, CopelandDatabase.dbo.Orders Orders
WHERE Orders.LocalCustomerID = CustomerLocal.LocalCustomerID AND Orders.Plant =     CustomerLocal.Plant AND ((CustomerLocal.IntExtCust In ('E')))
GROUP BY CustomerLocal.LocalCustomerID
ORDER BY CustomerLocal.LocalCustomerID
Union
SELECT CustomerLocal.LocalCustomerID, 
       Sum(Orders.OrdersEURO) AS 'Sum of OrdersEURO'
FROM MyDataBase.dbo.CustomerLocal CustomerLocal, CopelandDatabase.dbo.Orders Orders
WHERE Orders.LocalCustomerID = CustomerLocal.LocalCustomerID AND Orders.Plant =   
CustomerLocal.Plant AND ((CustomerLocal.IntExtCust In ('E')))
GROUP BY CustomerLocal.LocalCustomerID
ORDER BY CustomerLocal.LocalCustomerID

【讨论】:

  • 暂时无法给出答案,因为问题中有一个错误:两条SQL语句是一样的。
猜你喜欢
  • 2017-04-01
  • 1970-01-01
  • 2015-08-30
  • 2012-12-12
  • 2022-12-06
  • 2019-08-09
  • 1970-01-01
  • 2020-08-03
  • 2012-06-03
相关资源
最近更新 更多