创建查询以显示一周中每一天售出的产品数量
Create query to display number of products sold for each day of the week
我正在尝试在 SQL 服务器中生成一个看起来像这样的 table 服务器:
Name | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Total
Product1 | 2 | 0 | 1 | 0 | 1 | 0 | 0 | 4
Product2 | 2 | 1 | 0 | 1 | 0 | 0 | 0 | 4
Product3 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1
我的数据目前位于三个 table 中,如下所示:
ProductName
ID | Name
1 | Product1
2 | Product2
3 | Product3
ProductSelection
PID | CID
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
3 | 2
4 | 1
5 | 2
6 | 1
ProductOrder
ID | Name | SubmitDate
1 | John Doe | 6/15/2015
2 | Jane Doe | 6/15/2015
3 | Sam Doe | 6/16/2015
4 | Mark Doe | 6/17/2015
5 | Bob Doe | 6/18/2015
6 | Adam Doe | 6/19/2015
现在我知道我需要使用与此类似的 PIVOT:
PIVOT (COUNT(Name) FOR [Day] IN (Mon, Tue, Wed, Thu, Fri, Sat, Sun)) AS PivotTable
但我正在努力将查询的其余部分放在一起。我也不知道如何获得总数,也许是 INNER JOIN?如有任何帮助,我们将不胜感激。
试试这个:
select ProductName.Name, COUNT(ID), datename(dw,SubmitDate)
from ProductOrder
inner join ProductName on ProductOrder.ID = ProductName.ID
group by ProductName.Name, datename(dw, SubmitDate)
您将获得一周中每一天的每个产品销售数量的所有计数
除了使用PIVOT
,您还可以尝试使用条件聚合:
SELECT
Name = pn.Name,
[Mon] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Monday' THEN 1 ELSE 0 END),
[Tue] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Tuesday' THEN 1 ELSE 0 END),
[Wed] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Wednesday' THEN 1 ELSE 0 END),
[Thu] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Thursday' THEN 1 ELSE 0 END),
[Fri] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Friday' THEN 1 ELSE 0 END),
[Sat] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Saturday' THEN 1 ELSE 0 END),
[Sun] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Sunday' THEN 1 ELSE 0 END),
[Total] = COUNT(*)
FROM ProductOrder po
INNER JOIN ProductSelection ps
ON ps.PID = po.ID
INNER JOIN ProductName pn
ON pn.ID = ps.CID
GROUP BY pn.Name
结果
| Name | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Total |
|----------|-----|-----|-----|-----|-----|-----|-----|-------|
| Product1 | 2 | 0 | 1 | 0 | 1 | 0 | 0 | 4 |
| Product2 | 2 | 1 | 0 | 1 | 0 | 0 | 0 | 4 |
| Product3 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
我正在尝试在 SQL 服务器中生成一个看起来像这样的 table 服务器:
Name | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Total
Product1 | 2 | 0 | 1 | 0 | 1 | 0 | 0 | 4
Product2 | 2 | 1 | 0 | 1 | 0 | 0 | 0 | 4
Product3 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1
我的数据目前位于三个 table 中,如下所示:
ProductName
ID | Name
1 | Product1
2 | Product2
3 | Product3
ProductSelection
PID | CID
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
3 | 2
4 | 1
5 | 2
6 | 1
ProductOrder
ID | Name | SubmitDate
1 | John Doe | 6/15/2015
2 | Jane Doe | 6/15/2015
3 | Sam Doe | 6/16/2015
4 | Mark Doe | 6/17/2015
5 | Bob Doe | 6/18/2015
6 | Adam Doe | 6/19/2015
现在我知道我需要使用与此类似的 PIVOT:
PIVOT (COUNT(Name) FOR [Day] IN (Mon, Tue, Wed, Thu, Fri, Sat, Sun)) AS PivotTable
但我正在努力将查询的其余部分放在一起。我也不知道如何获得总数,也许是 INNER JOIN?如有任何帮助,我们将不胜感激。
试试这个:
select ProductName.Name, COUNT(ID), datename(dw,SubmitDate)
from ProductOrder
inner join ProductName on ProductOrder.ID = ProductName.ID
group by ProductName.Name, datename(dw, SubmitDate)
您将获得一周中每一天的每个产品销售数量的所有计数
除了使用PIVOT
,您还可以尝试使用条件聚合:
SELECT
Name = pn.Name,
[Mon] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Monday' THEN 1 ELSE 0 END),
[Tue] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Tuesday' THEN 1 ELSE 0 END),
[Wed] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Wednesday' THEN 1 ELSE 0 END),
[Thu] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Thursday' THEN 1 ELSE 0 END),
[Fri] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Friday' THEN 1 ELSE 0 END),
[Sat] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Saturday' THEN 1 ELSE 0 END),
[Sun] = SUM(CASE WHEN DATENAME(WEEKDAY, po.SubmitDate) = 'Sunday' THEN 1 ELSE 0 END),
[Total] = COUNT(*)
FROM ProductOrder po
INNER JOIN ProductSelection ps
ON ps.PID = po.ID
INNER JOIN ProductName pn
ON pn.ID = ps.CID
GROUP BY pn.Name
结果
| Name | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Total |
|----------|-----|-----|-----|-----|-----|-----|-----|-------|
| Product1 | 2 | 0 | 1 | 0 | 1 | 0 | 0 | 4 |
| Product2 | 2 | 1 | 0 | 1 | 0 | 0 | 0 | 4 |
| Product3 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |