0

次のwith rollupようなデータを出力するクエリがあります(クエリは少し忙しいですが、必要に応じて投稿できます)

range    subCounts    Counts    percent
1-9      3            100       3.0
10-19    13           100       13.0
20-29    30           100       33.0
30-39    74           100       74.0
NULL     100          100       100.0

合計を現在の合計に保つにはどうすればよいpercentですか?一番下の15パーセンタイルを見つける必要があるとしましょう。この場合3+13=16は、最後の行が返されるようにします。

range    subCounts    counts    percent
10-19    13           100       13.0

編集1:ここでクエリ

select '$'+cast(+bin*10000 + ' ' as varchar(10)) + '-' + cast(bin*10000+9999 as varchar(10)) as bins, 
    count(*) as numbers,
    (select count(distinct patient.patientid) from patient 
    inner join tblclaims on patient.patientid = tblclaims.patientid
    and patient.admissiondate = tblclaims.admissiondate
    and patient.dischargedate = tblclaims.dischargedate
    inner join tblhospitals on tblhospitals.hospitalnpi = patient.hospitalnpi
    where (tblhospitals.hospitalname = 'X') 
    ) as Totals
    , round(100*count(*)/cast((select count(distinct patient.patientid) from patient 
    inner join tblclaims on patient.patientid = tblclaims.patientid
    and patient.admissiondate = tblclaims.admissiondate
    and patient.dischargedate = tblclaims.dischargedate
    inner join tblhospitals on tblhospitals.hospitalnpi = patient.hospitalnpi
    where (tblhospitals.hospitalname = 'X')) as float),2) as binsPercent


from
(

select tblclaims.patientid, sum(claimsmedicarepaid) as TotalCosts, 
    cast(sum(claimsmedicarePaid)/10000 as int) as bin
    from tblclaims inner join patient on patient.patientid = tblclaims.patientid
    and patient.admissiondate = tblclaims.admissiondate 
    and patient.dischargedate = tblclaims.dischargedate
    inner join tblhospitals on patient.hospitalnpi = tblhospitals.hospitalnpi
    where tblhospitals.hospitalname = 'X'
    group by tblclaims.patientid
)   as t 
group by bin with rollup
4

2 に答える 2

0

さて、これを参照用に使用する可能性のある人のために、私は自分が何をする必要があるかを理解しました。

row_number() over(bin) as rownumクエリに追加して、これらすべてをビューとして保存しました。

それから私は使用しました

SELECT *,
          SUM(t2.binspercent) AS SUM
FROM t t1
INNER JOIN t t2 ON t1.rownum >= t2.rownum
GROUP BY t1.rownum,
         t1.bins, t1.numbers, t1.uktotal, t1.binspercent
ORDER BY t1.rownum

t1.rownum> = t2.rownumに参加することで、ローリングカウントのようなものを得ることができます。

于 2012-07-23T18:03:58.170 に答える
0

これは私が探していたものではありませんが、同じトラックにあります:http: //blog.tallan.com/2011/12/08/sql-server-2012-windowing-functions-part-1-of- 2-running-and-sliding-aggregates/およびhttp://blog.tallan.com/2011/12/19/sql-server-2012-windowing-functions-part-2-of-2-new-analytic-functions / -PERCENT_RANK CUME_DISTPERCENTILE_CONTPERCENTILE_DISCを確認してください

不完全な答えでごめんなさい

于 2012-07-23T22:13:45.337 に答える