【发布时间】:2018-03-21 00:25:45
【问题描述】:
好的,所以基本上我的DISTINCT 使用ROW_NUMBER() 变得无用,我需要避免这种情况,因为它会导致重复的结果(当然除了唯一的数字!)
所以我正在寻找的是一个可以工作但没有重复行的查询,因为 num 是唯一的:
WITH t AS
(
SELECT DISTINCT *, ROW_NUMBER() OVER (ORDER BY Date) AS num
FROM Original_Import
LEFT JOIN eqcas.dbo.BASE_PROXY_VIEW_WITHTARGET ON ADName = Targetuser
WHERE (BaseProxy = 'agmc' OR ADName = 'agmc')
AND (Commited IS NULL OR Commited = 0)
)
SELECT DISTINCT ID, num, ADName, Description_User, Description_Amex, Amount, Date
FROM t
WHERE (t.BaseProxy = 'agmc' OR t.ADName = 'agmc')
AND num BETWEEN 0 AND 20
AND (Commited IS NULL OR Commited = 0)
ORDER BY Date
修复它可能相当简单,但鉴于我不是 SQL Server 人员,我不习惯这些内部查询等。
更新:是的,num 用于分页。
【问题讨论】:
-
关于语法的任何想法,以及它会去哪里?记住我不懂 MSSQL!
-
见下文并尝试。现在我想我没有完全理解你。您需要以正确的方式对行进行编号,因此您的 CTE 无法按预期工作?
-
BETWEEN 0 AND 20是静态的,还是用于分页结果? -
我能想到的就是在 with T 上执行一个子查询,首先执行 distinct,然后在 distinct 处理后添加行号......我会处理语法,但我'm not near SQL atm...但这似乎会很慢....
-
缓慢不是问题 :) 这听起来像是正确的解决方案。谁能提供语法?我有 mysql 背景,从不使用内部查询。
标签: sql sql-server pagination distinct