在多列上计数不同

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

是否有更好的方法来执行这样的查询:

SELECT COUNT(*) 
FROM (SELECT DISTINCT DocumentId, DocumentSessionId
      FROM DocumentOutputItems) AS internalQuery

我需要从这个表中数出不同的项目数,但不同的是两列以上。

我的查询工作正常,但我想知道是否只使用一个查询就可以得到最终结果(而不使用子查询)。

提问于
用户回答回答于

如果要提高性能,可以尝试在这两列的散列或级联值上创建持久化计算列。

一旦该列被持久化,只要该列是确定性的,并且使用的是“正常”数据库设置,则可以对其进行索引和/或在其上创建统计信息。

我相信计算列的不同计数将等同于查询。

用户回答回答于

我已经发现了一种方法(在SQLServer 2005中),它对我非常有效,我可以使用我需要的任意数量的列(将它们添加到checksum()函数中)。函数将INT转换为varchars,以使不同的变量更加可靠。

SELECT COUNT(DISTINCT (CHECKSUM(DocumentId,DocumentSessionId)) + CHECKSUM(REVERSE(DocumentId),REVERSE(DocumentSessionId)) )
FROM DocumentOutPutItems

扫码关注云+社区