La requête MS SQL a besoin d'aide

Je veux atteindre le résultat ci-dessous. Je souhaite répertorier tous les loggings ayant le statut "Pour approbation" avec cette condition:

Par exemple pour Nom d'user 'Leo'

if ProcedureLevel="Propose" then count all userId of 'Leo' from ProposedCheckBy field if ProcedureLevel="Endorse" then count all userId of 'Leo' from EndorsedCheckBy field if ProcedureLevel="Approve" then count all userId 'Leo' from ApprovedCheckBy field 

Puis additionnez tout le statut ayant "Pour approbation" qui est le vérificateur est "Leo" avec la condition ci-dessus

 I want to achieved the result like this ----------------------------------------- Username | No of For Approval | Leo | 3 | Taurus | 2 | Capricorn | 1 | ----------------------------------------- Tables Users Id, userName Limits Id, [Description] ,[status],[procedurelevel] checkbyby1,checkbyby2, checkby3 Users Id [UserName] 1 Leo 2 Taurus 3 Capricorn Limits Id, [Description] ,[status] ,[procedurelevel] ProposedCheckedBy1 ,EndorsedCheckedBy2 , ApprovedCheckBy3 1 Limits1 For Approval Propose 1 null null 2 Limits2 For Approval Propose 1 null null 3 Limits3 For Approval Endorse 1 2 null 4 Limits4 For Approval Approve 1 2 1 5 Limits5 For Approval Approve 2 3 2 5 Limits5 For Approval Approve 1 2 3 

Je pense que c'est ce que vous searchz. Si ce n'est pas j'ai créé des tables et des inserts de données qui aideront quiconque vous donne la solution finale. Je pense que la coalescence est la chose que vous cherchez pour vous; en utilisant les colonnes de statut 1,2,3, vous pouvez travailler en arrière pour find l'user actuel en une passe.

Il returnne actuellement

 NoMatches procedurelevel userName 1 Approve Leo 1 Endorse Taurus 1 Propose Capricorn 2 Propose Leo 1 Propose Taurus Create table tblUsers ( Id int, userName varchar(100) ) Create table tblLimits ( Id int, [Description] varchar(20),[status] varchar(20),[procedurelevel] varchar(20), checkby1 int,checkby2 int, checkby3 int ) insert into tblUsers select 1, 'Leo' insert into tblUsers select 2, 'Taurus' insert into tblUsers select 3, 'Capricorn' insert into tblLimits select 1, 'Limits1', 'For Approval', 'Propose',1, null,null insert into tblLimits select 2, 'Limits2', 'For Approval', 'Propose',1, null, null insert into tblLimits select 3, 'Limits3', 'For Approval', 'Endorse',1, 2,null insert into tblLimits select 4, 'Limits4', 'For Approval', 'Approve',1, 2,1 insert into tblLimits select 5, 'Limits5', 'For Approval', 'Propose',2, 3,2 insert into tblLimits select 5, 'Limits5', 'For Approval', 'Propose',1, 2,3 select count(ProcedureLevel) as NoMatches, procedurelevel, bb.userName From tbllimits aa inner join tblUsers bb on coalesce(checkby3, checkby2, checkby1) = bb.id group by bb.userName, aa.procedurelevel drop table tblusers drop table tbllimits 

Voici ma réponse, le problème est Leo a 2 Non d'approbation au lieu de 3. S'il vous plaît corriger si ce que j'ai eu tort

 WITH UserAsignedLimits AS (SELECT ProposedCheckedBy AS Id , COUNT(ProposedCheckedBy) AS NoCheckBy FROM Limits WHERE [Status]='ForApproval' AND Procedurelevel='Propose' GROUP BY ProposedCheckedBy UNION ALL SELECT EndorsedCheckedBy AS Id , COUNT(EndorsedCheckedBy) AS NoCheckBy FROM Limits WHERE [Status]='ForApproval' AND Procedurelevel='Endorse' GROUP BY EndorsedCheckedBy UNION ALL SELECT ApprovedCheckedBy AS Id , COUNT(ApprovedCheckedBy) AS NoCheckBy FROM Limits WHERE [Status]='ForApproval' AND Procedurelevel='Approve' GROUP BY ApprovedCheckedBy) SELECT ID, COUNT(NoCheckBy) as NoofForApproval FROM UserAsignedLimits GROUP BY Id