【发布时间】:2014-10-24 20:38:32
【问题描述】:
我需要的是 select * from table group by * having count(*) > 1 之类的东西,它在 mssql2008r2 和 postgresql 上不起作用。该查询每周在不同的表上运行几次。问题基本上已经提出before。
因为对于为什么有人在存在 DISTINCT 时会需要这个问题一直存在混淆:我需要查询来识别没有主键的表中的相同行。我知道这不是一般情况,但这正是我必须记录和报告。
按返回所有表列并格式化为字符串的子查询分组不起作用:
select * from table
group by (select column_name + ', ' as data() from information_schema.columns
where table_name = 'table' for xml path(''))
返回错误消息。 144.
编辑:在编写查询时,我不知道列名。所以我需要一个通用查询而不指定列名。
EDIT2:建议的动态 sql 代码工作正常,但不适合我的情况,因为在我的外部代码中创建 GROUP BY 字符串会更容易。所以我仍在寻找一种通过一个查询来解决这个问题的方法。
【问题讨论】:
-
如果将 * 替换为所有表列,它将起作用。我没明白你的问题?描述所有列?
-
没错。我事先并不知道所有的专栏。我编辑了这个问题。正如我所说,查询子查询中的所有列并作为字符串连接是行不通的。
-
您需要担心多少张表以及它需要多久运行一次?听起来像是一次性练习,那么为什么不硬着头皮写一堆 SELECT... 语句呢?
-
这是一个数据质量分析工具,每周运行几次。每次都在一个新的数据集上,所以它必须是通用的。我可以将其拆分为两个查询,而不是上面提到的子查询,但是在我的任何其他 ~140 个查询中都没有这种开销。在我看来,这些要复杂得多。
-
我看不到没有动态 SQL 或外部代码的方法来实现这一点。您真的需要知道计数还是只是想删除重复项?
标签: sql-server