Sql server 不使用子查询的不同行计数
假设我有一个表1,它有重复的行(忘记它没有主键的事实…),那么不使用连接、子查询或CTE,也不必像GROUP BY那样拼写列,是否可以重写下面的内容Sql server 不使用子查询的不同行计数,sql-server,tsql,count,distinct,Sql Server,Tsql,Count,Distinct,假设我有一个表1,它有重复的行(忘记它没有主键的事实…),那么不使用连接、子查询或CTE,也不必像GROUP BY那样拼写列,是否可以重写下面的内容 SELECT COUNT(*) FROM ( SELECT DISTINCT * FROM Table1 ) T1 如果您真的想这样做,您可以“选择COUNT(*)FROM table1 GROUP BY all,columns,here”,并将结果集的大小作为您的计数 但这将是每天都有价值的代码;) 你可以这样做 SELECT Coun
SELECT COUNT(*)
FROM (
SELECT DISTINCT * FROM Table1
) T1
如果您真的想这样做,您可以“选择COUNT(*)FROM table1 GROUP BY all,columns,here”,并将结果集的大小作为您的计数
但这将是每天都有价值的代码;) 你可以这样做
SELECT Count(DISTINCT ProductName) FROM Products
但是,如果您想要一个完全不同的记录计数,那么您必须使用您提到的其他选项之一
如果您想执行问题中建议的操作,那么这意味着您的表中有重复的记录
如果没有重复的记录,则
选择DISTINCT*from table
将与没有DISTINCT的记录相同 不,这是不可能的
如果您受到框架/查询工具/任何东西的限制,无法使用子查询,也无法拼写GROUP by中的每个列名,那么您就是SOL
如果您不受框架/查询工具/任何东西的限制,那么就没有理由不使用子查询 我只是想通过说您需要检查列的数据类型是否具有可比性来完善答案,否则您将在尝试将它们区分开来时出错: e、 g。 com.microsoft.sqlserver.jdbc.SQLServerException:无法将ntext数据类型选择为DISTINCT,因为它不可比较 这对于大型二进制、xml列和其他依赖于RDBMS-rtm的列是正确的。例如,SQLServer的解决方案是从SQLServer2005开始将其从一个ntext转换为一个nvarchar(MAX)
如果你坚持使用PK列,那么你应该没问题(我自己还没有验证过这一点,但我在逻辑上认为PK列必须具有可比性)是的,因此我的问题中的“我不想使用分组方式”陈述;)你为什么不想要一个子查询?@erikkallen:真的,这更像是一个沉重的负担。我喜欢知道我的选项:)
从T1中选择COUNT(DISTINCT(col1))
感谢这个例子——这正是我搜索时遇到的问题。