连接表然后对不同的值求和

Join tables then sum on distinct values

我正在应对 Adventureworks 的一些挑战,并且我正在尝试削减 down/summarize 加入的 table。

以下正确连接了我的两个 table 并生成了 3 列:

use AdventureWorks2012
select datename(dw,orderdate ) as "Day", LineTotal,OrderQty
from sales.SalesOrderDetail join sales.SalesOrderHeader
on (SalesOrderDetail.SalesOrderID=SalesOrderHeader.SalesOrderID)

稍微调整一下,结果 table 只显示星期一、星期二、星期三等不同的日期...

use AdventureWorks2012
select distinct(datename(dw,orderdate)) as "Day"
from sales.SalesOrderDetail join sales.SalesOrderHeader
on (SalesOrderDetail.SalesOrderID=SalesOrderHeader.SalesOrderID)

我正在尝试找出每天如何生成 LineTotal 总和和 OrderQty 总和,但没有成功。

我得到的最接近的是:

use AdventureWorks2012
select distinct(datename(dw,orderdate)) as "Day", sum(LineTotal), SUM(OrderQty)
from sales.SalesOrderDetail join sales.SalesOrderHeader
on (SalesOrderDetail.SalesOrderID=SalesOrderHeader.SalesOrderID)
group by OrderDate

然而,这会产生很多很多行,而不是仅仅 7 行以及随之而来的总计 LineTotal、OrderQty。

感谢您的任何建议。

我没有冒险作品,但很确定你可以做这样的事情。请注意,我在这里使用别名是为了让这更容易一些。此外,使用日期部分和长手日期部分而不是短手。速记版比较难记

select OrderDay = datepart(dayofweek, soh.OrderDate) 
    , sum(sod.LineTotal)
    , SUM(sod.OrderQty)
from sales.SalesOrderDetail sod
join sales.SalesOrderHeader soh on sod.SalesOrderID = soh.SalesOrderID
group by datepart(dayofweek, soh.OrderDate)
use AdventureWorks2012
select 
    datename(dw,orderdate ) as "Day", 
    SumLineTotal=SUM(LineTotal),
    SumOrderQty=SUM(OrderQty)
from 
    sales.SalesOrderDetail 
    INNER  join sales.SalesOrderHeader on (SalesOrderDetail.SalesOrderID=SalesOrderHeader.SalesOrderID)
group by 
    datename(dw,orderdate)
use AdventureWorks2012
select datename(dw,orderdate) as "Day", sum(LineTotal), SUM(OrderQty)
from sales.SalesOrderDetail join sales.SalesOrderHeader
on SalesOrderDetail.SalesOrderID=SalesOrderHeader.SalesOrderID
group by datename(dw,orderdate)

使用时,控制行形成的是group by子句,而不是select子句。因此,在 group by 子句中的 orderdate 列上使用 datename 函数。

另外,请注意 distinct 不是 函数。所以 distinct 后面的括号没有任何意义,实际上它们被忽略了。

在使用 group by 时不要使用 select distinct,这是多余的。