Hello,
I think I found a way to get both a 'Total' line and a 'Count' line. I have changed the column names to upper case.
select SYMNAME,
"Nux-v","Bell","Phos","Rhus","Sulf","Puls","Staph"
from (
select
grouping_id(symname, 0) symname_order,
case grouping_id(symname, 0)
when 2 then 'Grand Total'
when 3 then 'Count'
else symname
end symname,
remname,
case grouping_id(symname, 0)
when 3 then count(grade)
else sum(grade)
end grade
from remsym
where symnum in (659, 815, 2120, 2200, 220)
group by grouping sets( (remname), (remname,0), (symname, remname) )
)
pivot(max(grade) for remname in (
'Nux-v' as "Nux-v",'Bell' as "Bell",'Phos' as "Phos",'Rhus' as "Rhus",'Sulf' as "Sulf",'Puls' as "Puls",'Staph' as "Staph"
))
order by symname_order, symname;
SYMNAME Nux-v Bell Phos Rhus Sulf Puls Staph
Blood & Circulation, Haemorrhage (bleedi 4 4 4 3 4 4 1
Generals, Mind, Sensorium, Vertigo (dizz 4 4 4 4 3 3 2
Modalities, situation & circumstances, R 4 4 3 4 4 3 2
Modalities, situation & circumstances, T 3
Teeth & Gums, Gums 4 3 3 2 2 2 4
Grand Total 16 15 14 13 13 12 12
Count 4 4 4 4 4 4 5
To get the column names ordered properly, I use an intermediate SQL statement to generate the final SQL statement. This is the first method mentioned by Chris.
with template as ( select
q'<select SYMNAME,
#COL_LIST#
from (
select
grouping_id(symname, 0) symname_order,
case grouping_id(symname, 0)
when 2 then 'Grand Total'
when 3 then 'Count'
else symname
end symname,
remname,
case grouping_id(symname, 0)
when 3 then count(grade)
else sum(grade)
end grade
from remsym
where symnum in (659, 815, 2120, 2200, 220)
group by grouping sets( (remname), (remname,0), (symname, remname) )
)
pivot(max(grade) for remname in (
#PIVOT_LIST#
))
order by symname_order, symname>'
txt from dual
)
, parms as (
select
listagg('"'||remname||'"', ',')
within group(order by sum(grade) desc, count(grade))
col_list,
listagg(''''||remname||''' as "'||remname||'"', ',')
within group(order by sum(grade) desc, count(grade))
pivot_list
from remsym
where symnum in (659, 815, 2120, 2200, 220)
group by remname
)
select replace(
replace(
txt,
'#COL_LIST#',
col_list
),
'#PIVOT_LIST#',
pivot_list
)
from template, parms;
Result:
select SYMNAME,
"Nux-v","Bell","Phos","Rhus","Sulf","Puls","Staph","Calc","Bry","Merc","Nat-m","Sepia","Lyc","Acon","Arn","Nit-ac","Ferr","Ars","Carb-v","Cham","Con","Sil","Carb-a","Caust","Chin","Hep","Ph-ac","Zinc","Borx","Cann-s","Canth","Cic","Op","Sabin","Stram","Bov","Caps","Kali-c","Mur-ac","Sul-ac","Ip","Cocc","Croc","Dros","Graph","Hyos","Ign","Petr","Scill","Sec-c","Tarx","Thuj","Verat","Amm-m","Anac","Ruta","Sars","Cupr","Laur","Ran-b","Ambr","Amm-c","Ant-c","Asar","Iod","Nat-c","Sabad","Spong","Alum","Arg","Bar-c","Mag-m","Plb","Stann","Led","Mosch","Valer","Agar","Colch","Coloc","Creos","Dig","Kali-n","M-arc","Nux-m","Rhod","Viol-t","Aur","Calad","Dulc","Mez","Spig","Stront","Bism","Lach","M-amb","M-aus","Mag-c","Par","Plat","Eupho","Mang","Olnd","Rheum","Verba","Viol-o","Ang","Ant-t","Chel","Coff","Euphr","Hell","Meny","Ran-s","Seneg","Vitx","Asaf","Camph","Cina","Clem","Cycl","Mar","Samb","Selen"
from (
select
grouping_id(symname, 0) symname_order,
case grouping_id(symname, 0)
when 2 then 'Grand Total'
when 3 then 'Count'
else symname
end symname,
remname,
case grouping_id(symname, 0)
when 3 then count(grade)
else sum(grade)
end grade
from remsym
where symnum in (659, 815, 2120, 2200, 220)
group by grouping sets( (remname), (remname,0), (symname, remname) )
)
pivot(max(grade) for remname in (
'Nux-v' as "Nux-v",'Bell' as "Bell",'Phos' as "Phos",'Rhus' as "Rhus",'Sulf' as "Sulf",'Puls' as "Puls",'Staph' as "Staph",'Calc' as "Calc",'Bry' as "Bry",'Merc' as "Merc",'Nat-m' as "Nat-m",'Sepia' as "Sepia",'Lyc' as "Lyc",'Acon' as "Acon",'Arn' as "Arn",'Nit-ac' as "Nit-ac",'Ferr' as "Ferr",'Ars' as "Ars",'Carb-v' as "Carb-v",'Cham' as "Cham",'Con' as "Con",'Sil' as "Sil",'Carb-a' as "Carb-a",'Caust' as "Caust",'Chin' as "Chin",'Hep' as "Hep",'Ph-ac' as "Ph-ac",'Zinc' as "Zinc",'Borx' as "Borx",'Cann-s' as "Cann-s",'Canth' as "Canth",'Cic' as "Cic",'Op' as "Op",'Sabin' as "Sabin",'Stram' as "Stram",'Bov' as "Bov",'Caps' as "Caps",'Kali-c' as "Kali-c",'Mur-ac' as "Mur-ac",'Sul-ac' as "Sul-ac",'Ip' as "Ip",'Cocc' as "Cocc",'Croc' as "Croc",'Dros' as "Dros",'Graph' as "Graph",'Hyos' as "Hyos",'Ign' as "Ign",'Petr' as "Petr",'Scill' as "Scill",'Sec-c' as "Sec-c",'Tarx' as "Tarx",'Thuj' as "Thuj",'Verat' as "Verat",'Amm-m' as "Amm-m",'Anac' as "Anac",'Ruta' as "Ruta",'Sars' as "Sars",'Cupr' as "Cupr",'Laur' as "Laur",'Ran-b' as "Ran-b",'Ambr' as "Ambr",'Amm-c' as "Amm-c",'Ant-c' as "Ant-c",'Asar' as "Asar",'Iod' as "Iod",'Nat-c' as "Nat-c",'Sabad' as "Sabad",'Spong' as "Spong",'Alum' as "Alum",'Arg' as "Arg",'Bar-c' as "Bar-c",'Mag-m' as "Mag-m",'Plb' as "Plb",'Stann' as "Stann",'Led' as "Led",'Mosch' as "Mosch",'Valer' as "Valer",'Agar' as "Agar",'Colch' as "Colch",'Coloc' as "Coloc",'Creos' as "Creos",'Dig' as "Dig",'Kali-n' as "Kali-n",'M-arc' as "M-arc",'Nux-m' as "Nux-m",'Rhod' as "Rhod",'Viol-t' as "Viol-t",'Aur' as "Aur",'Calad' as "Calad",'Dulc' as "Dulc",'Mez' as "Mez",'Spig' as "Spig",'Stront' as "Stront",'Bism' as "Bism",'Lach' as "Lach",'M-amb' as "M-amb",'M-aus' as "M-aus",'Mag-c' as "Mag-c",'Par' as "Par",'Plat' as "Plat",'Eupho' as "Eupho",'Mang' as "Mang",'Olnd' as "Olnd",'Rheum' as "Rheum",'Verba' as "Verba",'Viol-o' as "Viol-o",'Ang' as "Ang",'Ant-t' as "Ant-t",'Chel' as "Chel",'Coff' as "Coff",'Euphr' as "Euphr",'Hell' as "Hell",'Meny' as
"Meny",'Ran-s' as "Ran-s",'Seneg' as "Seneg",'Vitx' as "Vitx",'Asaf' as "Asaf",'Camph' as "Camph",'Cina' as "Cina",'Clem' as "Clem",'Cycl' as "Cycl",'Mar' as "Mar",'Samb' as "Samb",'Selen' as "Selen"
))
order by symname_order, symname;
Please note that I have hard-coded the SYMNUM list. Obviously, you need to change this, but how depends on where you are calling the SQL from.
Best regards, Stew Ashton