MS SQL查询按状态列出计数
我想达到下面的结果。我想列出所有状态为“待批准”的记录以及以下条件: 例如用户名“Leo”MS SQL查询按状态列出计数,sql,sql-server,aggregate,Sql,Sql Server,Aggregate,我想达到下面的结果。我想列出所有状态为“待批准”的记录以及以下条件: 例如用户名“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 Procedu
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
然后将所有状态加总为“待批准”,即检查者为“Leo”,符合上述条件
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
我想这就是你想要的;如果不是这样,我已经创建了表和数据插入,这将有助于提供最终解决方案的人。我认为联合是你正在寻找的东西;使用status 1,2,3列,您可以在一次过程中反向查找当前用户 它现在返回
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
这是我的答案,问题是Leo有2个批准,而不是3个。如果我错了,请纠正
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
基于过程级别,您需要什么样的逻辑输出?@gbn-这是我想要实现的输出结果用户名No供批准狮子座3金牛座2摩羯座1,但不确定如何获得这些结果。为什么金牛座有2分的结果?看看3分和5分的记录,金牛座是检查结果的人,程序级别为认可和批准U07CH-非常感谢。。。如何用高分投票,为什么投票分数只有1分?