Con*_*ngo 2 t-sql sql-server sql-server-2008
我有一个巨大的select语句,有多个内部联接,可以返回20列信息.
是否有某种方法可以过滤结果以仅基于单个列执行唯一(或不同)?
另一种思考方式是,当它进行连接时,它只在单个ID上获取连接的第一个结果,然后它停止并移动到下一个ID的连接.
我已经成功地使用group by和distinct,但这些都需要你指定多列,不只是一列,从而出现了一个数量级,以减缓下来查询.
更新
@Martin Smith的答案非常有效.
当我更新查询以使用此技术时:
GROUP BY子句中添加大量参数).警告(非常小)
请注意,如果您完全确定要删除的行将始终是重复的,那么您应该只使用@Martin Smith的答案,否则此查询将是非确定性的(即它可能会从运行中带回不同的结果) ).
这不是问题GROUP BY,因为TSQL语法分析器会阻止它发生,即它只会让你在没有重复的可能性的情况下恢复结果.
你可以用row_number它
WITH T AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY YourCol ORDER BY YourOtherCol) AS RN,
--Rest of your query here
)
SELECT *
FROM T
WHERE RN=1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |