Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

SQL query to get group count without using the group by clause

user10991018May 8 2025

Hi I have a requirment as follows

please find the test data scripts attached.

CREATE TABLE "DSGCIS"."TEST1"
("ID_NBR" NUMBER,
"CODEIDA" VARCHAR2(20 BYTE),
"CODEIDB" VARCHAR2(20 BYTE),
"CODEIDC" VARCHAR2(20 BYTE))

SET DEFINE OFF;
Insert into TEST1 (CODEIDA,CODEIDB,CODEIDC,ID_NBR) values ('Y','N','Y',1);
Insert into TEST1 (CODEIDA,CODEIDB,CODEIDC,ID_NBR) values ('Y','Y','N',2);

CREATE TABLE "TEST2" (
"ID_NBR" NUMBER,
"NAME" VARCHAR2(20 BYTE),
"LOC" VARCHAR2(20 BYTE)
);

SET DEFINE OFF;
Insert into TEST2 (ID_NBR,NAME,LOC) values (1,'TEST','NEWYORK');
Insert into TEST2 (ID_NBR,NAME,LOC) values (1,'TEST1','NEWYORK');
Insert into TEST2 (ID_NBR,NAME,LOC) values (2,'TEST2','DENMARK');

When i ran my query as below i am getting the output

select TEST1.ID_NBR,
TEST1.CODEIDA,
TEST1.CODEIDB,
TEST1.CODEIDC,
TEST2.ID_NBR,
TEST2.NAME,
TEST2.LOC,
COUNT(
CASE
WHEN TEST1.CODEIDA = 'Y' THEN
1
END
)
OVER(PARTITION BY TEST1.ID_NBR) CODE_A_CNT ,
COUNT(
CASE
WHEN TEST1.CODEIDB = 'Y' THEN
1
END
)
OVER(PARTITION BY TEST1.ID_NBR) CODE_B_CNT ,
COUNT(
CASE
WHEN TEST1.CODEIDC = 'Y' THEN
1
END
)
OVER(PARTITION BY TEST1.ID_NBR) CODE_C_CNT
FROM TEST1,TEST2
WHERE TEST1.ID_NBR=TEST2.ID_NBR

but expected out put is to show the code_A_cnt and code_c_cnt should show 1 because it is the same ID number and two clients/names are involved.

can you please advise.

thanks so much

Comments
Post Details
Added on May 8 2025
4 comments
111 views