【问题标题】:How to see which SQL Columns are groupable如何查看哪些 SQL 列是可分组的
【发布时间】:2014-11-28 17:32:36
【问题描述】:

我正在编写一个日志分析工具,它提供了一个动态查询的表列表。然后,对于每个表,我想允许用户运行一个选择查询,他们根据某些可选列进行分组。挑战?确定(动态)哪些列是可分组的类型。任何帮助,将不胜感激。这可能是错误分类的,但 SO 是我所知道的最受欢迎的编码网站之一,因此将这些信息提供给未来的观众是有意义的。

任何帮助将不胜感激。谢谢。

问题:您如何(动态地)判断 MsSQL 表中的哪些列是可分组的?

示例错误:操作数数据类型文本对于最大运算符无效。

【问题讨论】:

  • 任何列都是可分组的,关于如何分组列有一些规则,按列分组时google查看规则列表。
  • @M.Ali 这并不完全正确。例如,TEXTNTEXTIMAGE 数据类型的列不可分组
  • 我遇到了 Lamak 提到的确切问题。谁曾经-1'd this...如果您撤消否决票,我将不胜感激。
  • 根据您的示例错误,您实际上正在寻找的是哪些列类型可以使用哪些聚合函数,对吗?
  • 正确。看起来只要一列是可索引的(如 Microsoft SQL Server Management Studio 中所示),它就可用于聚合函数。所以现在的诀窍是找出一个查询来显示哪些列是可索引的。

标签: sql-server group-by database-schema dynamic-columns aggregates


【解决方案1】:

我认为没有一种简单的方法可以做到这一点,例如直接查询 IsGroupable 属性的架构信息。因此,这感觉像是一种温和的 hack,但这里是:

SELECT 
    * 
FROM    
    INFORMATION_SCHEMA.COLUMNS 
WHERE 
    DATA_TYPE IN ('bigint', 'bit', 'char', 'date', 'datetime', 'datetime2'
                , 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'nchar', 'numeric'
                , 'nvarchar', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time'
                , 'timestamp', 'tinyint', 'uniqueidentifier', 'varchar')

【讨论】:

  • 谢谢一百万,先生。如果可以的话,我会投票。如果将来对 MsSQL 进行更改,您介意引用您从哪里获得此已知聚合就绪类型列表吗?
  • 没问题。不过,老实说,这份名单几乎完全出乎我的意料。在定义一个新表来帮助我时,我浏览了一个类型列表,所以我可能错过了一些东西。
猜你喜欢
  • 2013-08-08
  • 2016-03-06
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 2018-09-10
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多