SQL Query Help to get count

SQL 321 Reputation points
2022-01-07T17:31:23.663+00:00

Hi:

Need help with a SQL Query:

I have Summary data with ID, Name and then Details data. I would like to display

% of total UID exists in @tblUIDDetails tables (In the above example only 3 UID exists)
% of individual UID loaded in @tblUIDDetails table (Load Flag OK).
% of individual UID loaded in @tblUIDDetails table (Load Flag KO).

DECLARE @tblUIDSummary TABLE  
(UID VARCHAR(10) PRIMARY KEY,  
 UName VARCHAR(20))  
  
INSERT INTO @tblUIDSummary VALUES ('101','TEST1')  
INSERT INTO @tblUIDSummary VALUES ('102','TEST2')  
INSERT INTO @tblUIDSummary VALUES ('103','TEST3')  
INSERT INTO @tblUIDSummary VALUES ('104','TEST4')  
INSERT INTO @tblUIDSummary VALUES ('105','TEST5')  
  
DECLARE @tblUIDDetails TABLE  
(UID VARCHAR(10),  
 LoadFlag VARCHAR(5),  
 Details VARCHAR(50))  
  
INSERT INTO @tblUIDDetails VALUES ('101','OK','XYZ')  
INSERT INTO @tblUIDDetails VALUES ('101','OK','PQR')  
INSERT INTO @tblUIDDetails VALUES ('101','OK','ABCDEF')  
INSERT INTO @tblUIDDetails VALUES ('101','OK','TST')  
INSERT INTO @tblUIDDetails VALUES ('101','OK','TOMDD')  
  
INSERT INTO @tblUIDDetails VALUES ('103','OK','ABC')  
INSERT INTO @tblUIDDetails VALUES ('103','OK','TST2345')  
INSERT INTO @tblUIDDetails VALUES ('103','OK','ZZZ')  
INSERT INTO @tblUIDDetails VALUES ('103','KO','TTT')  
INSERT INTO @tblUIDDetails VALUES ('103','KO','ZOOM')  
  
INSERT INTO @tblUIDDetails VALUES ('105','OK','PPP')  
INSERT INTO @tblUIDDetails VALUES ('105','OK','QQQQQQ')  
INSERT INTO @tblUIDDetails VALUES ('105','OK','DDDD')  
INSERT INTO @tblUIDDetails VALUES ('105','KO','YYYYYYY')  
  
  
     
---- OUTPUT  
SELECT   
    US.UID, US.UName,  
    CASE WHEN COUNT(UD.UID) > 0 THEN 'YES' ELSE 'NO' END AS [UID Loaded],  
    CASE WHEN COUNT(UD.UID) = 0 THEN 0  
         ELSE CAST(SUM(CASE WHEN UD.LoadFlag = 'OK' THEN 1 ELSE 0 END) * 100.0 /   
              COUNT(UD.LoadFlag) AS tinyint) END AS [OK Percentage],  
    CASE WHEN COUNT(UD.UID) = 0 THEN 0  
         ELSE CAST(SUM(CASE WHEN UD.LoadFlag = 'KO' THEN 1 ELSE 0 END) * 100.0 /   
              COUNT(UD.LoadFlag) AS tinyint) END AS [KO Percentage]  
FROM @tblUIDSummary US  
LEFT OUTER JOIN @tblUIDDetails UD ON UD.UID = US.UID  
GROUP BY US.UID, US.UName  
ORDER BY US.UID, US.UName  

I get the output using this query, but I also need the number of records displayed (count) for OK and KO

163255-expectedoutput1.jpg

Thanks!

Developer technologies Transact-SQL
0 comments No comments
{count} votes

Accepted answer
  1. Viorel 122.5K Reputation points
    2022-01-07T17:49:18.407+00:00

    Try these columns:

    count(case UD.LoadFlag when 'OK' then 0 end) as [OK Count],
    count(case UD.LoadFlag when 'KO' then 0 end) as [KO Count],
    
    0 comments No comments

0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.