2012-01-08 108 views
1

我創建了一個數據庫表叫tbl_timesheet_hours如下:集團通過SQL語句 - 在一行鞏固成果

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 

任何類型的援助將不勝感激。謝謝。

+0

是存儲在MS-訪問數據本身或者是你的MS-訪問與SQL-Server數據源的工作? – Sparky 2012-01-08 23:35:18

回答

3

如下您將使用交叉表查詢:

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"); 
+0

太棒了。這正是我所要求的。 – rosst400 2012-01-08 23:55:48

0

您是否嘗試過使用SWITCH表達式裏面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 BYwork_order_date刪除。

+0

試過了。結果數據集與我的原始查詢相同。 – rosst400 2012-01-08 23:54:48

+0

@ rosst400:當然,我忘了從GROUP BY中刪除一個條目,對不起!請嘗試更新的版本。 – 2012-01-08 23:58:32

+0

太棒了 - 您的更新版本可以正常工作。 – rosst400 2012-01-09 22:57:14