Click here to Skip to main content
15,892,768 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
The Query Goes like this

DECLARE @dd TABLE (Username VARCHAR(250), WorkArea VARCHAR(50), Scope VARCHAR(50), Quality INT)
insert into @dd (Username ,WorkArea ,Scope ,Quality) select QAResource,WorkArea,ProjectScope ,quality from[PMT] .dbo.QADetailsnew
insert into @dd (Username ,WorkArea ,Scope ,Quality)select a.resources,a.work_area,a.scope, a.Quality   from [workalloc] .[dbo] .work a
 
;WITH UserTotals AS
(
        -- initial values
 
                SELECT LEFT(Username, CHARINDEX(',', Username )-1) AS SingleUser, Quality, RIGHT(Username, LEN(Username) - CHARINDEX(',', Username)) AS Remainder
                FROM @dd
                WHERE CHARINDEX(',', Username)>0
                union all
                select Username as SingleUser,Quality, NULL as Remainder
                FROM @dd
                WHERE CHARINDEX(',',Username )=0
               
        -- here starts recursive part
                UNION ALL
                SELECT LEFT(Remainder, CHARINDEX(',', Remainder)-1) AS SingleUser, Quality, RIGHT(Remainder, LEN(Remainder) - CHARINDEX(',', Remainder)) AS Remainder
                FROM UserTotals
                WHERE CHARINDEX(',', Remainder)>0
                UNION ALL
                SELECT Remainder AS SingleUser, Quality, NULL AS Remainder
                FROM UserTotals
                WHERE CHARINDEX(',', Remainder)=0
)
select distinct(SingleUser),(sum(Quality)/COUNT(SingleUser)) as QualityPercentage, 100-sum(Quality)/COUNT(SingleUser ) as ErrorPercentage
from UserTotals
group by SingleUser

The problem goes like this

that is,
Username      Quality%
aa,bb,cc      100
aa            99

I get Answer in this case as
SingleUser            Quality%
aa                    99 
bb                    100
cc                    100


if i change the order of the username i dont get the value
For Example
Username                Quality%
bb,aa,cc                100
aa                      99


In my query i get in this format as solution
SingleUser              Quality%
aa                      100
bb                      100
cc                      100
aa                      99


I need the average as 99 for aa. even if the order of the username is changed
Posted
Updated 18-May-15 21:11pm
v2
Comments
_Asif_ 19-May-15 3:52am    
I don't undertand.

I have tweaked your SQL a bit to check like below

DECLARE @dd TABLE (Username VARCHAR(250), Quality INT)
insert into @dd (Username ,Quality) select 'bb,aa,cc', 100
insert into @dd (Username ,Quality) select 'aa,dd', 99

;WITH UserTotals AS
(
-- initial values

SELECT LEFT(Username, CHARINDEX(',', Username )-1) AS SingleUser, Quality, RIGHT(Username, LEN(Username) - CHARINDEX(',', Username)) AS Remainder
FROM @dd
WHERE CHARINDEX(',', Username)>0
union all
select Username as SingleUser,Quality, NULL as Remainder
FROM @dd
WHERE CHARINDEX(',',Username )=0

-- here starts recursive part
UNION ALL
SELECT LEFT(Remainder, CHARINDEX(',', Remainder)-1) AS SingleUser, Quality, RIGHT(Remainder, LEN(Remainder) - CHARINDEX(',', Remainder)) AS Remainder
FROM UserTotals
WHERE CHARINDEX(',', Remainder)>0
UNION ALL
SELECT Remainder AS SingleUser, Quality, NULL AS Remainder
FROM UserTotals
WHERE CHARINDEX(',', Remainder)=0
)
select distinct(SingleUser),(sum(Quality)/COUNT(SingleUser)) as QualityPercentage, 100-sum(Quality)/COUNT(SingleUser ) as ErrorPercentage
from UserTotals
group by SingleUser

and it is giving result as per your requirement, so where is the issue?

aa 99 1
bb 100 0
cc 100 0
dd 99 1
Member 11683119 21-May-15 2:34am    
I figured it out. You were right sir. The Query works fine but gives problem to the white spaces with the username
For example
Username Quality
aa, bb, cc 100
bb 99

Beacuse of the white spaces its giving different values that is
bb as 100
bb as 99
Will you help me out sir.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900