Sql server SQL Server 1/Countif

Sql server SQL Server 1/Countif,sql-server,count,Sql Server,Count,SQL Server中是否存在与1/countif等效的值 比如: SELECT ID,1/COUNTIF(ID) FROM Table …将1除以表中具有特定ID的行数,以以下格式返回结果: ID Result 1 0.5 1 0.5 2 1 3 0.33 3 0.33 3 0.33 etc. 如果您的版本是2005及更新版本,则可以使用聚合COUNT(): 您可以在MSDN站点中找到更多示例: 与COUNTIF没有确切的等价物,但使用标准SQL很容易做到。 尝

SQL Server中是否存在与1/countif等效的值

比如:

SELECT ID,1/COUNTIF(ID)
FROM Table
…将1除以表中具有特定ID的行数,以以下格式返回结果:

ID  Result
1   0.5
1   0.5 
2   1
3   0.33
3   0.33
3   0.33 etc.

如果您的版本是2005及更新版本,则可以使用聚合
COUNT()


您可以在MSDN站点中找到更多示例:

与COUNTIF没有确切的等价物,但使用标准SQL很容易做到。 尝试类似的方法(如果您的表被称为“test”):


请参见另一个变体,但我最喜欢@ypercube的简单解决方案

;WITH x(ID,c) AS (SELECT ID, COUNT(*) FROM dbo.Table GROUP BY ID)
SELECT t.ID, 1.0/x.c
FROM dbo.Table AS t
INNER JOIN x ON t.ID = x.ID;

谢谢,这太好了。它可以用于countif,即基于多个列的计数吗?是的,您可以有任意多个计数。例如:
1.0/count(*)OVER(按id、col1、col2等划分)as countif\u id
?是的,如果您想计算有多少行具有相同的
id
col1
col2
,是的。
SELECT ID,
       1.0 / (SELECT COUNT(*) FROM test t2 WHERE t2.ID = t1.ID) AS result
FROM   test t1;
;WITH x(ID,c) AS (SELECT ID, COUNT(*) FROM dbo.Table GROUP BY ID)
SELECT t.ID, 1.0/x.c
FROM dbo.Table AS t
INNER JOIN x ON t.ID = x.ID;