>source

쿼리 아래에 아래의 첫 네 개의 열이 표시됩니다.

declare @begindate DateTime,
        @enddate DateTime 
Select @begindate =Dateadd(month,datediff(month,0,getdate())-3,0)
      ,@enddate=EOMONTH(Dateadd(month,datediff(month,0,getdate())-1,0))
select p.username 'Approver'
,p.Code 'Status'
, count(p.PaymentRequestId) 'Monthly Count' 
,Datename(Month,p.max_date) 'Month'
from 
       (
        select  su.UserName,pr.PaymentRequestId,prs.Code ,max(pr.CreateDateTime) 'Max_Date' 
        from PaymentRequestStatusHistory pr
        inner join hydradb..SystemUser su on pr.systemuserid = su.SystemUserId
        inner join hydradb..PaymentRequestStatus prs on prs.PaymentRequestStatusid = pr.PaymentRequestStatusid
        where 1=1 
        and (convert(date,pr.CreateDateTime)  BETWEEN @begindate
            AND DATEADD(ms, - 2, DATEADD(dd, 1, DATEDIFF(dd, 0, @enddate))))
        and pr.PaymentRequestStatusId in (3,4)
        and su.systemuserid in ( 414, 336, 12)
        group by su.UserName,pr.PaymentRequestId,prs.Code
        )p
group by p.UserName,p.Code,  Datename(Month,p.max_date)
order by p.UserName,p.code

이제 상태 당 사용자 당 월별 총 '월수'백분율을 계산하는 추가 열을 만들어야합니다. 예 : 12 월에 월간 카운트는 2786 (mrob Approved 2785 및 rsimm 승인 1)이며 매월 총 백분율을 계산해야합니다. 12 월에 mrob은 99.96 %를 승인했으며 rsimm은 0.035 %를 승인했습니다.

아래와 같이

! [여기에 이미지 설명 입력] [1]


  • 답변 # 1

    창 함수를 사용하여 총계를 월별로 그룹화 한 다음이 수량을 사용하여 계산 된 값을 행으로 나눕니다. 제공된 코드가 테스트 할 수없는 것처럼 작동하지만 확실하게 비슷한 지 확실하지 않습니다.

    DECLARE @begindate DateTime,
            @enddate DateTime 
    SELECT @begindate = Dateadd(month,datediff(month,0,getdate())-3,0)
          ,@enddate   = EOMONTH(Dateadd(month,datediff(month,0,getdate())-1,0))
    SELECT p.username 'Approver'
          ,p.Code 'Status'
          ,count(p.PaymentRequestId) 'Monthly Count' 
          ,Datename(Month,p.max_date) 'Month'
          ,count(p.PaymentRequestId)/Count(p.PaymentRequestID) 
           OVER (PARTITION BY Datename(Month,p.max_date)) AS 'Percentage'
    FROM 
           (
            select  su.UserName,pr.PaymentRequestId,prs.Code ,max(pr.CreateDateTime) 'Max_Date' 
            FROM PaymentRequestStatusHistory pr
            INNER JOIN hydradb..SystemUser su on pr.systemuserid = su.SystemUserId
            INNER JOIN hydradb..PaymentRequestStatus prs 
            on prs.PaymentRequestStatusid = pr.PaymentRequestStatusid
            WHERE 1=1 
            AND (convert(date,pr.CreateDateTime)  BETWEEN @begindate
            AND DATEADD(ms, - 2, DATEADD(dd, 1, DATEDIFF(dd, 0, @enddate))))
            AND pr.PaymentRequestStatusId in (3,4)
            AND su.systemuserid in ( 414, 336, 12)
            GROUP BY su.UserName,pr.PaymentRequestId,prs.Code
            ) p
    GROUP BY p.UserName,p.Code,  Datename(Month,p.max_date)
    ORDER BY p.UserName,p.code;
    
    

  • 답변 # 2

    창 기능을 사용할 수 있습니다 :

    select . . . ,
           count(*) as cnt,
           count(*) * 1.0 / sum(count(*)) over (partition by Datename(Month, p.max_date), status) as ratio
    
    

관련 자료

  • 이전 dropbox api - 파일을 사용하여 원본 크기 이미지 가져 오기
  • 다음 javascript - Facebook에서 로컬 호스트 페이지를 공유하는 동안이 페이지를 가져 오는 중 오류가 발생했습니다