【问题标题】:Group By SQL Statement - consolidating results on one rowGroup By SQL 语句 - 将结果合并到一行
【发布时间】:2012-01-08 22:38:26
【问题描述】:

我创建了一个名为 tbl_timesheet_hours 的数据库表,如下所示:

timesheet_no
work_order_no
work_order_date
work_order_hours

表格中的数据填充为:

timesheet_no    work_order_no   work_order_date     work_order_hours
4               NTS0026B        2012-01-02          1
4               NTS0031B        2012-01-02          9
4               NTS0031B        2012-01-03          8
4               NTS0031B        2012-01-04          7
4               NTS0031B        2012-01-05          6
4               NTS0031B        2012-01-06          5
4               NTS0031B        2012-01-07          4
4               NTS0031B        2012-01-08          3

我需要创建一个查询,该查询将构成时间表报告的基础,该报告可以以典型承包商的时间表格式打印,即它将在第一列中显示 work_order_no 字段,然后是为每个字段分配的小时数天。我创建的查询是:

SELECT
  work_order_no,
  switch(Format(work_order_date,'ddd') = "Mon", SUM(work_order_hours)) AS [Mon],
  switch(Format(work_order_date,'ddd') = "Tue", SUM(work_order_hours)) AS [Tue],
  switch(Format(work_order_date,'ddd') = "Wed", SUM(work_order_hours)) AS [Wed],
  switch(Format(work_order_date,'ddd') = "Thu", SUM(work_order_hours)) AS [Thu],
  switch(Format(work_order_date,'ddd') = "Fri", SUM(work_order_hours)) AS [Fri],
  switch(Format(work_order_date,'ddd') = "Sat", SUM(work_order_hours)) AS [Sat],
  switch(Format(work_order_date,'ddd') = "Sun", SUM(work_order_hours)) AS [Sun]
FROM tbl_timesheet_hours
WHERE timesheet_no=4
GROUP BY work_order_date, work_order_no;

查询产生以下结果集,

work_order_no   Mon Tue Wed Thu Fri Sat Sun
NTS0026B         1                      
NTS0031B         9                      
NTS0031B             8                  
NTS0031B                 7              
NTS0031B                     6          
NTS0031B                         5      
NTS0031B                             4  
NTS0031B                                 3

是否可以重组查询以产生以下结果集?

work_order_no   Mon Tue Wed Thu Fri Sat Sun
NTS0026B        1                       
NTS0031B        9   8   7   6   5   4   3

我们将不胜感激任何类型的帮助。谢谢。

【问题讨论】:

  • 数据本身是存储在 ms-access 中,还是您在 ms-access 中使用 SQL-Server 数据源?

标签: sql ms-access ms-access-2003


【解决方案1】:

您可以按如下方式使用交叉表查询:

TRANSFORM Sum(tbl_timesheet_hours.[work_order_hours]) AS SumOfwork_order_hours
SELECT tbl_timesheet_hours.[work_order_no], Sum(tbl_timesheet_hours.[work_order_hours]) AS     [Total Of work_order_hours]
FROM tbl_timesheet_hours
GROUP BY tbl_timesheet_hours.[work_order_no]
ORDER BY Format([work_order_date],'ddd')
PIVOT Format([work_order_date],'ddd') In ("Mon","Tue","Wed","Thu","Fri","Sat","Sun");

【讨论】:

  • 太棒了。这正是我所需要的。
【解决方案2】:

您是否尝试过使用SWITCH 表达式inside SUM()?像这样:

SELECT
  work_order_no,
  SUM(switch(Format(work_order_date,'ddd') = "Mon", work_order_hours)) AS [Mon],
  SUM(switch(Format(work_order_date,'ddd') = "Tue", work_order_hours)) AS [Tue],
  SUM(switch(Format(work_order_date,'ddd') = "Wed", work_order_hours)) AS [Wed],
  SUM(switch(Format(work_order_date,'ddd') = "Thu", work_order_hours)) AS [Thu],
  SUM(switch(Format(work_order_date,'ddd') = "Fri", work_order_hours)) AS [Fri],
  SUM(switch(Format(work_order_date,'ddd') = "Sat", work_order_hours)) AS [Sat],
  SUM(switch(Format(work_order_date,'ddd') = "Sun", work_order_hours)) AS [Sun]
FROM tbl_timesheet_hours
WHERE timesheet_no=4
GROUP BY work_order_no;

除此之外,还要从GROUP BY 中删除work_order_date

【讨论】:

  • 试过了。结果数据集与我的原始查询相同。
  • @rosst400:当然,我忘了从 GROUP BY 中删除一个条目,抱歉!请尝试更新版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 2020-04-01
相关资源
最近更新 更多