2016-10-22 2 views
0

저는 데이터베이스에서 데이터를 가져 와서 각 요일에 만들어진 출하 평균을 보여주는 애플리케이션을 제공하는 작은 프로젝트를 진행하고 있습니다. 나는 진전을 이루었고 모든 선적을 계산하는 스크립트를 가지고 있지만 varchar 유형의 열을 기반으로 계산하기 때문에 각 요일에 대한 평균을 개별적으로 계산할 솔루션이 필요합니다. 그것이 내가 순간 아이디어가 부족처럼 보이는와 더 잘 솔루션을 제공받을 수피봇 테이블의 평균 카운트 데이터 - 도움이 필요합니다.

SELECT [Monday], [Tuesday], [Wednesday], [Thursday], [Friday], [Saturday], [Sunday] 
    FROM (
     SELECT DATENAME(dw, Shipment.Date) AS DayWeek, Shipment.ID 
     FROM Shipment 
     WHERE MONTH(Shipment.Date)= MONTH(DATEADD(MONTH, DATEDIFF(MONTH, 0, 'OCTOBER 2016'), 0)) AND 
     Shipment.Bur = 'GB' 
) AS src 
pivot (
    COUNT(ID) FOR DayWeek IN ([Monday], [Tuesday], [Wednesday], [Thursday], [Friday], [Saturday], [Sunday]) 
) AS pvt 

나는 많은 어떤 힌트 나 도움을 주셔서 감사합니다 다음과 같이

지금까지 내가 뭔가와 끝까지 .

+0

샘플 데이터와 예상 결과를 게시 할 수 있습니까? –

답변

0

나는 사용자 중 하나에 의해 게시 비슷한 문제에 발생한 유래를 검색하여 내 질문에 대한 답을 발견했다.

SELECT [Day], SUM(q.Totals) AS "Weekly Shipment Amount", AVG(Totals) AS [Avg] 
FROM 
(
    SELECT 
    w = DATEDIFF(WEEK, 0, DATE), 
     [Day] = DATENAME(Weekday, DATE), 
     Totals = COUNT(*) 
    FROM dbo.Shipment 
    --INNER JOIN FCLI (NOLOCK) ON FCLI.CCLI = FEXP.CCLI 
     WHERE (BUR = 'GB' AND 
     Shipment.Date >= '20160601' AND Shipment.Date <= '20160630') 

    GROUP BY 
     DATEDIFF(WEEK, 0, Date), 
     DATENAME(WEEKDAY, Date), 
     DATEPART(WEEKDAY, Date) 
) AS q 
GROUP BY [Day] 
ORDER BY [DaY] ASC; 
0

나는 전부 pivot와 분배 및 별도의 행에 결과를두고 제안 :

SELECT DayWeek, AVG(cnt) 
FROM (SELECT s.Date, DATENAME(dw, s.Date) AS DayWeek, COUNT(*) as cnt 
     FROM Shipment s 
     WHERE MONTH(s.Date) = MONTH(DATEADD(MONTH, DATEDIFF(MONTH, 0, 'OCTOBER 2016'), 0)) AND 
      s.Bur = 'GB' 
     GROUP BY s.Date 
    ) d 
GROUP BY DayWeek 
ORDER BY MIN(s.Date); 
관련 문제