2011-02-03 5 views
2

診療所への訪問を一覧表示するテーブルがあります。患者さんが診療所にどれほど頻繁に訪れるかを示す「ヒストグラム」を得たいと思います。ここではいくつかのサンプルコードは、私が話しているかを示すために(MS SQL Server 2005の下でテスト)です:caculatedフィールドを持つSQLクエリから合計を取得する方法

CREATE TABLE #test (
    visit_id int IDENTITY(1,1), 
    patient_id int 
); 

DECLARE @num_patients int; 
SELECT @num_patients = 1000 + ABS(CHECKSUM(NEWID())) % 250; 

INSERT INTO #test (patient_id) 
SELECT TOP 15 PERCENT ABS(CHECKSUM(NEWID())) % @num_patients 
FROM sysobjects a, sysobjects b; 

-- SELECT COUNT(*) AS total_visits FROM #test; 

-- SELECT COUNT(DISTINCT patient_id) AS distinct_patients FROM #test; 

SELECT CASE GROUPING(num_pat_visits) WHEN 1 THEN 'Total' 
      ELSE CAST(num_pat_visits AS varchar(5)) END AS num_pat_visits, 
    COUNT(*) AS num_patients, num_pat_visits * COUNT(*) AS tot_pat_visit 
FROM 
    (SELECT patient_id, COUNT(*) AS num_pat_visits FROM #test GROUP BY patient_id) a 
GROUP BY num_pat_visits WITH ROLLUP 
ORDER BY CAST(num_pat_visits AS int) DESC; 

これは私がしたい場所にほとんど私を取得します。

num_pat_visits num_patients tot_pat_visit 
-------------- ------------ ------------- 
60      1   60 
54      2   108 
52      2   104 
51      4   204 
50      3   150 
49      3   147 
48      7   336 
47      7   329 
46      15   690 
45      15   675 
44      29   1276 
43      36   1548 
42      45   1890 
41      45   1845 
40      59   2360 
39      71   2769 
38      51   1938 
37      72   2664 
36      77   2772 
35      74   2590 
34      72   2448 
33      82   2706 
32      90   2880 
31      74   2294 
30      69   2070 
29      47   1363 
28      30   840 
27      27   729 
26      26   676 
25      21   525 
24      13   312 
23      4   92 
22      5   110 
21      4   84 
20      2   40 
18      2   36 
Total     1186   NULL 

をしかし、私はできません合計行にNULLと表示される総訪問数をSQL Serverに表示するように見えます。

アイデア?

+0

グレートサンプルコードを! –

答えて

2

私はあなただけで行うことができると思います。

sum(num_pat_visits) as tot_pat_visit

SELECT CASE GROUPING(num_pat_visits) WHEN 1 THEN 'Total' 
      ELSE CAST(num_pat_visits AS varchar(5)) END AS num_pat_visits, 
    COUNT(*) AS num_patients, 
    --num_pat_visits * COUNT(*) AS tot_pat_visit 
    sum(num_pat_visits) as tot_pat_visit 
FROM 
    (SELECT patient_id, COUNT(*) AS num_pat_visits FROM #test GROUP BY patient_id) a 
GROUP BY num_pat_visits WITH ROLLUP 
ORDER BY CAST(num_pat_visits AS int) DESC; 
+0

私は行く必要がある場所を、感謝! – Joe

関連する問題