加入表格然后对不同的值

时间:2017-12-14 20:51:06

标签: sql-server adventureworks

我正在完成一些Adventureworks挑战,并且我试图减少/总结一个联合表。

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

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

稍微调整一下,会产生一个只显示星期一,星期二,星期三等不同日期的表格。

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

enter image description here

我试图弄清楚如何生成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。

感谢您的任何建议。

3 个答案:

答案 0 :(得分:0)

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

{{1}}

答案 1 :(得分:0)

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)

答案 2 :(得分:0)

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 不是一项功能。所以括号后的单词不同意味着什么,实际上它们被忽略了。

使用select distinct时请勿使用group by,这是多余的。