是否将行计数转为比率列?(在MS-SQL中)
我有以下疑问: 从tblTask a中选择a.IsCancelled,count* a.TICKTID=t.TID上的内部连接tblTicket t t a.取消分组 这让我觉得: 取消计数 0 7851 1 11235 假设我想添加另一列,其中包含相对于每行的百分比,我应该得到以下结果: 取消计数比率 0 7851 0.41135 1 11235 0.58865 这叫做枢轴,对吗?我将如何完成此计算?要实现这一点,我需要在上面的查询中添加什么?谢谢, 实施 最后我对diaho的答案做了如下修改: 声明@tbl表为取消位,[Count]int 插入@tbl 从tblTask a中选择a.IsCancelled,count*[count] a.TICKTID=t.TID上的内部连接tblTicket t t a.取消分组 选择IsCancelled[计数],roundcast[计数]作为浮点/选择sum[计数] 来自@tbl,来自@tbl的5[比率]是否将行计数转为比率列?(在MS-SQL中),sql,sql-server,pivot,Sql,Sql Server,Pivot,我有以下疑问: 从tblTask a中选择a.IsCancelled,count* a.TICKTID=t.TID上的内部连接tblTicket t t a.取消分组 这让我觉得: 取消计数 0 7851 1 11235 假设我想添加另一列,其中包含相对于每行的百分比,我应该得到以下结果: 取消计数比率 0 7851 0.41135 1 11235 0.588
您必须使用子查询。下面的查询应该可以在sqlserver和mysql中使用,但我不确定它是否可以在任何rdbms中使用
select a.IsCancelled, count(*), count(*)/(select count(*) from tblTask)
from tblTask a
inner join tblTicket t on a.TicketID = t.TID
group by a.IsCancelled
另一种方法
select a.IsCancelled, count(*), count(*)/totalcount
from tblTask a,
tblTicket t,
(select IsCancelled, count(*) as totalcount from tblTask) as tablecount,
where a.TicketID = t.TID
group by a.IsCancelled
这里的关键是在一个查询或事务中执行此操作,否则您的计数可能会从一个查询更改为下一个查询。您必须使用子查询。下面的查询应该可以在sqlserver和mysql中使用,但我不确定它是否可以在任何rdbms中使用
select a.IsCancelled, count(*), count(*)/(select count(*) from tblTask)
from tblTask a
inner join tblTicket t on a.TicketID = t.TID
group by a.IsCancelled
另一种方法
select a.IsCancelled, count(*), count(*)/totalcount
from tblTask a,
tblTicket t,
(select IsCancelled, count(*) as totalcount from tblTask) as tablecount,
where a.TicketID = t.TID
group by a.IsCancelled
这里的关键是在一个查询或事务中执行此操作,否则您的计数可能会从一个查询更改为下一个查询。请尝试以下操作
DECLARE @Total INT
SELECT @Total = select count(1) from tblTask
select a.IsCancelled, count(1), count(1)/@Total
from tblTask a
inner join tblTicket t on a.TicketID = t.TID
group by a.IsCancelled
试试下面的方法
DECLARE @Total INT
SELECT @Total = select count(1) from tblTask
select a.IsCancelled, count(1), count(1)/@Total
from tblTask a
inner join tblTicket t on a.TicketID = t.TID
group by a.IsCancelled
如果您使用的是SQL Server 2005或更高版本:
SELECT
a.IsCancelled,
Count = COUNT(*),
Ratio = COUNT(*) * 1.0 / SUM(COUNT(*)) OVER ()
FROM tblTask a
INNER JOIN tblTicket t ON a.TicketID = t.TID
GROUP BY a.IsCancelled
参考资料:
如果您使用的是SQL Server 2005或更高版本:
SELECT
a.IsCancelled,
Count = COUNT(*),
Ratio = COUNT(*) * 1.0 / SUM(COUNT(*)) OVER ()
FROM tblTask a
INNER JOIN tblTicket t ON a.TicketID = t.TID
GROUP BY a.IsCancelled
参考资料:
不幸的是,这对我不起作用,也没有我能想到的任何变化添加了另一种/更丑陋的方式。我不认为您可以像在第一个变体中那样运行SELECT作为要返回的列之一。同样对于第二个问题,您需要从子查询中删除IsCancelled,并以某种方式将tablecount与tblTask连接起来以访问totalcount。我刚刚在mysql中测试了这两种方法,它们确实有效。我确实尝试了一个没有其他连接的简化示例。啊,我假设sql server/MSSQLServer不幸的是,这对我来说不起作用,也没有我能想到的任何变体添加了另一种/更丑陋的方式。我不认为您可以像在第一个变体中那样运行SELECT作为要返回的列之一。同样对于第二个问题,您需要从子查询中删除IsCancelled,并以某种方式将tablecount与tblTask连接起来以访问totalcount。我刚刚在mysql中测试了这两种方法,它们确实有效。我确实尝试了一个没有其他连接的简化示例。啊,我假设sql server/mssqlNo不是枢轴。你在用什么数据库管理系统?不,那不是枢轴。您使用的是什么数据库管理系统?