2012-01-08 1 views
1

한 행에 대한 통합 검색 결과 : 내가 만들 필요가그룹으로 SQL 문 - 다음과 같이 내가 데이터베이스 테이블에게 전화 tbl_timesheet_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 

: 같은 테이블에 채워 데이터

timesheet_no 
work_order_no 
work_order_date 
work_order_hours 

전형적인 계약자의 시간표 형식으로 인쇄 될 수있는 시간표 보고서의 기초를 형성하는 질의, 즉 첫 번째 열에 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

답변

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

0

SUM() 안에 SWITCH 표현식을 사용해 보셨습니까? 이처럼 :

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 제거합니다. 다음과 같이

+0

시도해보십시오. 결과 데이터 세트는 원래 쿼리와 동일합니다. – rosst400

+0

@ rosst400 : 물론, GROUP BY에서 한 항목을 삭제하는 것을 잊었습니다. 죄송합니다! 업데이트 된 버전을 사용해보십시오. –

+0

위대한 - 업데이트 된 버전이 작동합니다. – rosst400

관련 문제