【发布时间】:2011-03-30 10:51:43
【问题描述】:
我有一个查询,它选择了一堆与客户姓名和地址相关的字段,但归结为:
SELECT DISTINCT a, b, c, ... FROM big_dumb_flat_table
它返回一堆记录 (10986590)。当我替换选择列表中的逗号以将其格式化为管道分隔的连接字符串时:
SELECT DISTINCT a + '|' + b + '|' + c + '|' + ... FROM big_dumb_flat_table
它又返回了 248 条记录。我已经向自己保证,在任何领域都没有管道可能会破坏返回集的保真度。这是怎么回事?
【问题讨论】:
-
你能看看你用
SELECT a,b,c... FROM ... GROUP BY a,b,c...得到了什么,然后把它编辑成你的问题吗? (因为DISTINCT在技术上是一个(非常方便的)hack) -
还将 count(*) 添加到查询中,看看有什么效果
-
我希望使用连接的查询返回更少条记录,因为如果任何值是
null,您将得到null结果。 -
马克,关于计数你想知道什么?它们从 1 到低数百不等。但这就是应该的(在完全非规范化的数据源中,“应该”是一件有趣的事情)。
-
查询运行,将 DISTINCT 替换为 GROUP BY 返回相同的数字。
标签: sql sql-server sql-server-2005 concatenation