Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否将行计数转为比率列?(在MS-SQL中)_Sql_Sql Server_Pivot - Fatal编程技术网

是否将行计数转为比率列?(在MS-SQL中)

是否将行计数转为比率列?(在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

我有以下疑问:

从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[比率]
您必须使用子查询。下面的查询应该可以在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不是枢轴。你在用什么数据库管理系统?不,那不是枢轴。您使用的是什么数据库管理系统?