'Solving a Query on SQLDeveloper
need some help on solving this query. I want to get projects that had no change in their team (i.e. because project0002 has two different project managers it must not appear on the result of the query)
Can you help me ?
CREATE TABLE sprintMembers (
userID NUMBER(10) NOT NULL,
sprintNumber NUMBER(10) NOT NULL,
sprintProjectCode VARCHAR(255) NOT NULL,
memberRole VARCHAR(255) NOT NULL,
PRIMARY KEY (userID, sprintNumber, sprintProjectCode));
INSERT INTO sprintMembers VALUES (4,1,'PROJ0001', 'Project Manager');
INSERT INTO sprintMembers VALUES (5,1,'PROJ0001', 'Product Owner');
INSERT INTO sprintMembers VALUES (6,1,'PROJ0001', 'Scrum Master');
INSERT INTO sprintMembers VALUES (4,1,'PROJ0002', 'Project Manager');
INSERT INTO sprintMembers VALUES (3,2,'PROJ0002', 'Project Manager');
INSERT INTO sprintMembers VALUES (4,3,'PROJ0002', 'Project Manager');
INSERT INTO sprintMembers VALUES (5,1,'PROJ0002', 'Product Owner');
INSERT INTO sprintMembers VALUES (5,2,'PROJ0002', 'Product Owner');
INSERT INTO sprintMembers VALUES (7,1,'PROJ0002', 'Team Member');
INSERT INTO sprintMembers VALUES (7,2,'PROJ0002', 'Team Member');
INSERT INTO sprintMembers VALUES (4,1,'PROJ0003', 'Project Manager');
INSERT INTO sprintMembers VALUES (4,2,'PROJ0003', 'Project Manager');
INSERT INTO sprintMembers VALUES (5,1,'PROJ0003', 'Product Owner');
INSERT INTO sprintMembers VALUES (5,2,'PROJ0003', 'Product Owner');
INSERT INTO sprintMembers VALUES (7,1,'PROJ0003', 'Scrum Master');
INSERT INTO sprintMembers VALUES (7,2,'PROJ0003', 'Scrum Master');
INSERT INTO sprintMembers VALUES (6,1,'PROJ0003', 'Team Member');
INSERT INTO sprintMembers VALUES (6,2,'PROJ0003', 'Team Member');
INSERT INTO sprintMembers VALUES (8,1,'PROJ0004', 'Project Manager');
INSERT INTO sprintMembers VALUES (8,2,'PROJ0004', 'Project Manager');
INSERT INTO sprintMembers VALUES (8,3,'PROJ0004', 'Project Manager');
INSERT INTO sprintMembers VALUES (9,1,'PROJ0004', 'Product Owner');
INSERT INTO sprintMembers VALUES (9,2,'PROJ0004', 'Product Owner');
INSERT INTO sprintMembers VALUES (9,3,'PROJ0004', 'Product Owner');
INSERT INTO sprintMembers VALUES (10,1,'PROJ0004', 'Scrum Master');
INSERT INTO sprintMembers VALUES (10,2,'PROJ0004', 'Scrum Master');
INSERT INTO sprintMembers VALUES (10,3,'PROJ0004', 'Scrum Master');
INSERT INTO sprintMembers VALUES (6,1,'PROJ0004', 'Team Member');
INSERT INTO sprintMembers VALUES (6,2,'PROJ0004', 'Team Member');
INSERT INTO sprintMembers VALUES (6,3,'PROJ0004', 'Team Member');
Solution 1:[1]
If I understand correctly you can aggregate and count distinct userId
select sprintProjectCode
from sprintMembers
group by sprintProjectCode
having Count(distinct case when memberRole='project manager' then userid end)=1
Result:
PROJ0001
PROJ0003
PROJ0004
Edit
Another approach applying to all member role values
with groups as (
select sprintProjectCode, Count(*) cnt
from sprintMembers
group by sprintProjectCode, userid, memberrole
)
select sprintProjectCode
from groups
group by sprintProjectCode
having Min(cnt) = Max(cnt)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
