SQL Server 2005内でgroup byをrollup句で使用しようとしていますが、何か問題があります。私はこの単純なクエリを実行する場合グループ句とロールアップ
は、これは私が取得
select id_name,fname,surname,sum(qty) as tot
from group_roll
group by id_name,fname,surname
シンプルダンプ
create table group_roll (
id int identity,
id_name int,
fname varchar(50),
surname varchar(50),
qty int
)
go
insert into group_roll (id_name,fname,surname,qty) values (1,'john','smith',10)
insert into group_roll (id_name,fname,surname,qty) values (1,'john','smith',30)
insert into group_roll (id_name,fname,surname,qty) values (2,'frank','white',5)
insert into group_roll (id_name,fname,surname,qty) values (1,'john','smith',8)
insert into group_roll (id_name,fname,surname,qty) values (2,'frank','white',10)
insert into group_roll (id_name,fname,surname,qty) values (3,'rick','black',10)
go
ある
1 john smith 48
2 frank white 15
3 rick black 10
私がしたいのですが
1 john smith 48
2 frank white 15
3 rick black 10
Total 73
これは私が私の目標
select
case when grouping(id_name) = 1 then 'My total' else cast(id_name as char) end as Name_id ,
fname,surname,sum(qty) as tot
from group_roll
group by id_name,fname,surname
with rollup
order by case when id_name is null then 1 else 0 end, tot desc
に到達しようとしてきたものですが、私の結果は私のミスがある
1 john smith 48
1 john NULL 48
1 NULL NULL 48
2 frank white 15
2 frank NULL 15
2 NULL NULL 15
3 rick black 10
3 rick NULL 10
3 NULL NULL 10
My total NULL NULL 73
のですか?
EDIT。 私は
select * from (
select cast(id_name as char) as id_name,fname,surname,sum(qty) as tot
from group_roll
group by id_name,fname,surname
union
select 'Total',null,null,sum(qty) from group_roll) as t
order by case when id_name = 'Total' then 1 else 0 end,tot desc
を作る私の問題を解決することができますが、私はロールアップは私の問題を解決することができるかどうかを理解したいと思います。あなたは文自体の中にそれを行うことはできません、しかし、あなたは中間ロールアップ除くROLLUP
セットをフィルタリングすることができ
私はドアの外私の方法で、と私ははっきりと考えることが土曜日には時期尚早だが、多分、むしろ両方のフィールドを個別 – jlnorsworthy