| Author |
Topic |
|
ryfisher
Starting Member
2 Posts |
Posted - 2010-03-30 : 14:45:58
|
I have a table that shows in a column if a certain indicator is present in a patient's hospital visit. If the inidcator is present, there is a 1, if it is not present, it is null.I have a query that is suming up all the 1's in the indicator column, and counting all the rows for that measure (the are "null"), then dividing them to get a percentage. There are about 12 of these measures, and i have them all set to do the same thing, however, they are all on one row, but have 3 columns for each row. I want to get it so that each measure is its own row, and the values are in these three columns, Numerator, Denominator, and Month Percentage.Here is the SQL I am using, it is probably very long and not the best way to do it, but I am new to SQL and am still learning.Thanks in advance!with ami as (Select sum ([ami-1_ind]) as [ami-1_num], count (*) as [ami-1_denom],sum ([ami-2_ind]) as [ami-2_num], count (*) as [ami-2_denom],sum ([ami-3_ind]) as [ami-3_num], count (*) as [ami-3_denom],sum ([ami-4_ind]) as [ami-4_num], count (*) as [ami-4_denom],sum ([ami-5_ind]) as [ami-5_num], count (*) as [ami-5_denom],sum ([ami-6_ind]) as [ami-6_num], count (*) as [ami-6_denom],sum ([ami-7_ind]) as [ami-7_num], count (*) as [ami-7_denom],sum ([ami-7a_ind]) as [ami-7a_num], count (*) as [ami-7a_denom],sum ([ami-8_ind]) as [ami-8_num], count (*) as [ami-8_denom],sum ([ami-8a_ind]) as [ami-8a_num], count (*) as [ami-8a_denom],sum ([ami-9_ind]) as [ami-9_num], count (*) as [ami-9_denom],sum ([ami-T1a_ind]) as [ami-t1a_num], count (*) as [ami-t1a_denom],sum ([ami-t2_ind]) as [ami-t2_num], count (*) as [ami-t2_denom]from nmh_uhc_dm.core_measures_amiwhere disch_dt_tm between '12/1/2009' and '12/31/2009')select [ami-1_num], [ami-1_denom], (SUM([ami-1_num]*1.0/[ami-1_denom])) as [month perecentage],[ami-2_num], [ami-2_denom], (SUM([ami-2_num]*1.0/[ami-2_denom])) as [month perecentage],[ami-3_num], [ami-3_denom], (SUM([ami-3_num]*1.0/[ami-3_denom])) as [month perecentage],[ami-4_num], [ami-4_denom], (SUM([ami-4_num]*1.0/[ami-4_denom])) as [month perecentage],[ami-5_num], [ami-5_denom], (SUM([ami-5_num]*1.0/[ami-5_denom])) as [month perecentage],[ami-6_num], [ami-6_denom], (SUM([ami-6_num]*1.0/[ami-6_denom])) as [month perecentage],[ami-7_num], [ami-7_denom], (SUM([ami-7_num]*1.0/[ami-7_denom])) as [month perecentage],[ami-7a_num], [ami-7a_denom], (SUM([ami-7a_num]*1.0/[ami-7a_denom])) as [month perecentage],[ami-8_num], [ami-8_denom], (SUM([ami-8_num]*1.0/[ami-8_denom])) as [month perecentage],[ami-8a_num], [ami-8a_denom], (SUM([ami-8a_num]*1.0/[ami-8a_denom])) as [month perecentage],[ami-9_num], [ami-9_denom], (SUM([ami-9_num]*1.0/[ami-9_denom])) as [month perecentage],[ami-t1a_num], [ami-t1a_denom], (SUM([ami-t1a_num]*1.0/[ami-t1a_denom])) as [month perecentage],[ami-t2_num], [ami-t2_denom], (SUM([ami-t2_num]*1.0/[ami-t2_denom])) as [month perecentage]from amigroup by [ami-1_num], [ami-1_denom],[ami-2_num], [ami-2_denom],[ami-3_num], [ami-3_denom],[ami-4_num], [ami-4_denom],[ami-5_num], [ami-5_denom],[ami-6_num], [ami-6_denom],[ami-7_num], [ami-7_denom],[ami-7a_num], [ami-7a_denom],[ami-8_num], [ami-8_denom],[ami-8a_num], [ami-8a_denom],[ami-9_num], [ami-9_denom],[ami-t1a_num], [ami-t1a_denom],[ami-t2_num], [ami-t2_denom] |
|
|
ryfisher
Starting Member
2 Posts |
Posted - 2010-03-30 : 16:20:08
|
| anyone?? |
 |
|
|
PackRat
Starting Member
26 Posts |
Posted - 2010-03-30 : 18:51:00
|
maybe I'm missing something, but aren't all your _denom columns going to come out with the same count? count(*) doesn't eliminate the nulls, so I would expect all the _denom cols to end up the same value. if that's the case you can go with something like below.sounds like you want to UNPIVOT the columns into rows[url]http://technet.microsoft.com/en-us/library/ms177410.aspx[/url]I can't test this syntax without sample data; but I thijnk you're trying to go in this direction;with base as ( select [ami-1_num],[ami-2_num],[ami-3_num],[ami-4_num] ,[ami-5_num],[ami-6_num],[ami-7_num],[ami-7a_num] ,[ami-8_num],[ami-8a_num],[ami-9_num],[ami-t1a_num],[ami-t2_num] from nmh_uhc_dm.core_measures_ami where disch_dt_tm between '12/1/2009' and '12/31/2009')SELECT [Column]=pcts.col ,[Numerator]=pcts.num ,[Denominator]=pcts.denom ,[Month Percentage]=pcts.num*1.0/d.denom FROM ( select (select count(*) from base) denom ,sum([ami-1_ind]) as [ami-1_num] ,sum([ami-2_ind]) as [ami-2_num] ,sum([ami-3_ind]) as [ami-3_num] ,sum([ami-4_ind]) as [ami-4_num] ,sum([ami-5_ind]) as [ami-5_num] ,sum([ami-6_ind]) as [ami-6_num] ,sum([ami-7_ind]) as [ami-7_num] ,sum([ami-7a_ind]) as [ami-7a_num] ,sum([ami-8_ind]) as [ami-8_num] ,sum([ami-8a_ind]) as [ami-8a_num] ,sum([ami-9_ind]) as [ami-9_num] ,sum([ami-T1a_ind]) as [ami-t1a_num] ,sum([ami-t2_ind]) as [ami-t2_num] from base ) sums UNPIVOT ( num FOR col in ( [ami-1_num],[ami-2_num],[ami-3_num],[ami-4_num] ,[ami-5_num],[ami-6_num],[ami-7_num],[ami-7a_num] ,[ami-8_num],[ami-8a_num],[ami-9_num],[ami-t1a_num],[ami-t2_num] ) ) pcts _____________________________wrote this on my TRS-80 COCO4<PakRat/> |
 |
|
|
DBA in the making
Aged Yak Warrior
638 Posts |
Posted - 2010-03-30 : 20:12:08
|
PackRat's query is close. I've threw some test data at it, and there were a few minor errors compiling it. Fixed those, then compared the results to the original. Seems to work fine just fine (just fine). NOTE: I've remove the WHERE clause for testing purposes, so you'll need to add it again.CREATE TABLE #tmp ( [ami-1_ind] INT, [ami-2_ind] INT, [ami-3_ind] INT, [ami-4_ind] INT, [ami-5_ind] INT, [ami-6_ind] INT, [ami-7_ind] INT, [ami-7a_ind] INT, [ami-8_ind] INT, [ami-8a_ind] INT, [ami-9_ind] INT, [ami-t1a_ind] INT, [ami-t2_ind] INT)GOINSERT INTO #tmpSELECT 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1union ALL SELECT 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1union ALL SELECT 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1union ALL SELECT 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1union ALL SELECT 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1union ALL SELECT 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1;GO-- UNPIVOTed querywith base as ( select [ami-1_ind],[ami-2_ind],[ami-3_ind],[ami-4_ind] ,[ami-5_ind],[ami-6_ind],[ami-7_ind],[ami-7a_ind] ,[ami-8_ind],[ami-8a_ind],[ami-9_ind],[ami-t1a_ind],[ami-t2_ind] from #tmp)SELECT [Column]=pcts.col ,[Numerator]=pcts.num ,[Denominator]=pcts.denom ,[Month Percentage]=pcts.num*1.0/pcts.denom FROM ( select (select count(*) from base) denom ,sum([ami-1_ind]) as [ami-1_num] ,sum([ami-2_ind]) as [ami-2_num] ,sum([ami-3_ind]) as [ami-3_num] ,sum([ami-4_ind]) as [ami-4_num] ,sum([ami-5_ind]) as [ami-5_num] ,sum([ami-6_ind]) as [ami-6_num] ,sum([ami-7_ind]) as [ami-7_num] ,sum([ami-7a_ind]) as [ami-7a_num] ,sum([ami-8_ind]) as [ami-8_num] ,sum([ami-8a_ind]) as [ami-8a_num] ,sum([ami-9_ind]) as [ami-9_num] ,sum([ami-T1a_ind]) as [ami-t1a_num] ,sum([ami-t2_ind]) as [ami-t2_num] from base ) sums UNPIVOT ( num FOR col in ( [ami-1_num],[ami-2_num],[ami-3_num],[ami-4_num] ,[ami-5_num],[ami-6_num],[ami-7_num],[ami-7a_num] ,[ami-8_num],[ami-8a_num],[ami-9_num],[ami-t1a_num],[ami-t2_num] ) ) pcts;-- Original querywith ami as (Select sum ([ami-1_ind]) as [ami-1_num], count (*) as [ami-1_denom],sum ([ami-2_ind]) as [ami-2_num], count (*) as [ami-2_denom],sum ([ami-3_ind]) as [ami-3_num], count (*) as [ami-3_denom],sum ([ami-4_ind]) as [ami-4_num], count (*) as [ami-4_denom],sum ([ami-5_ind]) as [ami-5_num], count (*) as [ami-5_denom],sum ([ami-6_ind]) as [ami-6_num], count (*) as [ami-6_denom],sum ([ami-7_ind]) as [ami-7_num], count (*) as [ami-7_denom],sum ([ami-7a_ind]) as [ami-7a_num], count (*) as [ami-7a_denom],sum ([ami-8_ind]) as [ami-8_num], count (*) as [ami-8_denom],sum ([ami-8a_ind]) as [ami-8a_num], count (*) as [ami-8a_denom],sum ([ami-9_ind]) as [ami-9_num], count (*) as [ami-9_denom],sum ([ami-T1a_ind]) as [ami-t1a_num], count (*) as [ami-t1a_denom],sum ([ami-t2_ind]) as [ami-t2_num], count (*) as [ami-t2_denom]from #tmp)select [ami-1_num], [ami-1_denom], (SUM([ami-1_num]*1.0/[ami-1_denom])) as [month perecentage],[ami-2_num], [ami-2_denom], (SUM([ami-2_num]*1.0/[ami-2_denom])) as [month perecentage],[ami-3_num], [ami-3_denom], (SUM([ami-3_num]*1.0/[ami-3_denom])) as [month perecentage],[ami-4_num], [ami-4_denom], (SUM([ami-4_num]*1.0/[ami-4_denom])) as [month perecentage],[ami-5_num], [ami-5_denom], (SUM([ami-5_num]*1.0/[ami-5_denom])) as [month perecentage],[ami-6_num], [ami-6_denom], (SUM([ami-6_num]*1.0/[ami-6_denom])) as [month perecentage],[ami-7_num], [ami-7_denom], (SUM([ami-7_num]*1.0/[ami-7_denom])) as [month perecentage],[ami-7a_num], [ami-7a_denom], (SUM([ami-7a_num]*1.0/[ami-7a_denom])) as [month perecentage],[ami-8_num], [ami-8_denom], (SUM([ami-8_num]*1.0/[ami-8_denom])) as [month perecentage],[ami-8a_num], [ami-8a_denom], (SUM([ami-8a_num]*1.0/[ami-8a_denom])) as [month perecentage],[ami-9_num], [ami-9_denom], (SUM([ami-9_num]*1.0/[ami-9_denom])) as [month perecentage],[ami-t1a_num], [ami-t1a_denom], (SUM([ami-t1a_num]*1.0/[ami-t1a_denom])) as [month perecentage],[ami-t2_num], [ami-t2_denom], (SUM([ami-t2_num]*1.0/[ami-t2_denom])) as [month perecentage]from amigroup by [ami-1_num], [ami-1_denom],[ami-2_num], [ami-2_denom],[ami-3_num], [ami-3_denom],[ami-4_num], [ami-4_denom],[ami-5_num], [ami-5_denom],[ami-6_num], [ami-6_denom],[ami-7_num], [ami-7_denom],[ami-7a_num], [ami-7a_denom],[ami-8_num], [ami-8_denom],[ami-8a_num], [ami-8a_denom],[ami-9_num], [ami-9_denom],[ami-t1a_num], [ami-t1a_denom],[ami-t2_num], [ami-t2_denom]GODROP TABLE #tmpGO There are 10 types of people in the world, those that understand binary, and those that don't. |
 |
|
|
|
|
|