Can you please help me in getting the below output
create table temp(id number,first_name varchar2(10),last_name varchar2(10),order_id varchar2(2));
insert into temp values(1,'Ram1','Shayam1','O1');
insert into temp values(1,'Ram1','Shayam1','O2');
insert into temp values(2,'Ram2','Shayam2','O1');
insert into temp values(2,'Ram2','Shayam2','O2');
insert into temp values(3,'Ram3','Shayam3','O1');
insert into temp values(4,'Ram4','Shayam4','O1');
insert into temp values(4,'Ram4','Shayam4','O2');
insert into temp values(4,'Ram4','Shayam4','O3');
insert into temp values(5,'Ram5','Shayam5','O1');
insert into temp values(5,'Ram5','Shayam5','O2');
insert into temp values(5,'Ram5','Shayam5','O3');
insert into temp values(6,'Ram6','Shayam6','O1');
insert into temp values(7,'Ram7','Shayam7','O1');
id first_name last_name order_id count
--------------------------------------------
1 Ram1 Shayam1 O1 1
1 Ram1 Shayam1 O2 1
1 2 --total number of id,grp by id
2 Ram2 Shayam2 O1 1
2 Ram2 Shayam2 O2 1
2 2
3 Ram3 Shayam3 O1 1
3 1
4 Ram4 Shayam4 O1 1
4 Ram4 Shayam4 O2 1
4 Ram4 Shayam4 O3 1
4 3
5 Ram5 Shayam5 O1 1
5 Ram5 Shayam5 O2 1
5 Ram5 Shayam5 O3 1
5 Ram5 Shayam5 O4 1
5 4
6 Ram6 Shayam6 O1 1
6 1
7 Ram7 Shayam7 O1 1
7 1
7 --total distinct id
I have tried using rollup ,but I am not able to achieve the last total distinct id with rollup
According to your desired output it should be like this:
SELECT id,
first_name,
last_name,
order_id,
CASE
WHEN grouping(id) = 1
THEN COUNT(DISTINCT id)
ELSE COUNT(*)
END res
FROM temp
GROUP BY grouping sets ((id ,first_name ,last_name ,order_id),(id),());