我正在完成一些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)
我试图弄清楚如何生成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。
感谢您的任何建议。
答案 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
,这是多余的。