ROW_NUMBER()中的MSSQL Distinct错误

时间:2015-12-21 10:23:07

标签: mysql sql-server sql-server-2008 pagination

我正在使用MySQL和... MSSQL在我的项目中,我限制了condtn,distinct并将我的查询与分页结合起来。

MYSQL查询工作正常,但在LIMIT查询中使用distinct时,MSSQL查询出错。

MYSQL QUERY:

SELECT DISTINCT  p_rework
,                p_approved 
,                pf_id
,                pf_plan 
,                pf_ver
,                pf_createdby
,                pf_createdon createdon
,                pf_updatedby
,                pf_updatedon
,                pf_approvedby
,                pf_approvedon
,                0 p_runs
,                '' runname
,                '' runstatus
,                '' scheduledon
,                '' runon 
FROM             planinfo a
,                plans b 
WHERE            a.pf_id = b.p_id 
            AND  pf_project='proj001' 
            AND  p_approved IN(0,3,4) 
GROUP BY         pf_id
,                pf_createdon
,                pf_updatedon
,                pf_plan
,                pf_ver
,                pf_createdby
,                pf_updatedby
,                pf_approvedby
,                pf_approvedon
,                b.p_createdon
,                b.p_approved
,                p_rework  
ORDER BY         pf_id  DESC  
LIMIT            0,5

以上MYSQL查询工作正常但MSSQL查询无法正常工作 MSSQL QUERY:

select      * 
from        (
                select  ROW_NUMBER() over (ORDER BY  pf_id  DESC) AS Row 
                ,       distinct p_rework
                ,       p_approved 
                ,       pf_id
                ,       pf_plan 
                ,       pf_ver
                ,       pf_createdby
                ,       pf_createdon createdon
                ,       pf_updatedby
                ,       pf_updatedon
                ,       pf_approvedby
                ,       pf_approvedon
                ,       0 p_runs
                ,       '' runname
                ,       '' runstatus
                ,       '' scheduledon
                ,       '' runon 
                FROM    planinfo a
                ,       plans b 
                WHERE   a.pf_id = b.p_id 
                    AND pf_project='proj001' 
                    AND p_approved In(0,3,4) 
                GROUP BY pf_id 
                ,        pf_createdon
                ,        pf_updatedon
                ,        pf_plan
                ,        pf_ver
                ,        pf_createdby
                ,        pf_updatedby 
                ,        pf_approvedby
                ,        pf_approvedon
                ,        b.p_createdon
                ,        b.p_approved
                ,        p_rework
            ) as temp 
 WHERE  row between 0 and 5

MSSQL错误:

Incorrect syntax near the keyword 'distinct'.

没有明显的我尝试过它的工作,但分页不起作用,我也希望显示不同的价值。

如何使用distinct?

修改我的查询

1 个答案:

答案 0 :(得分:0)

试试这个:

;WITH t AS
(
        select  distinct ROW_NUMBER() over (ORDER BY  pf_id  DESC) AS Row
        ,       p_rework
        ,       p_approved 
        ,       pf_id
        ,       pf_plan 
        ,       pf_ver
        ,       pf_createdby
        ,       pf_createdon createdon
        ,       pf_updatedby
        ,       pf_updatedon
        ,       pf_approvedby
        ,       pf_approvedon
        ,       0 p_runs
        ,       '' runname
        ,       '' runstatus
        ,       '' scheduledon
        ,       '' runon 
        FROM    planinfo a
        ,       plans b 
        WHERE   a.pf_id = b.p_id 
            AND pf_project='proj001' 
            AND p_approved In(0,3,4) 
        GROUP BY pf_id 
        ,        pf_createdon
        ,        pf_updatedon
        ,        pf_plan
        ,        pf_ver
        ,        pf_createdby
        ,        pf_updatedby 
        ,        pf_approvedby
        ,        pf_approvedon
        ,        b.p_createdon
        ,        b.p_approved
        ,        p_rework
)
SELECT * FROM t WHERE t.Row between 0 and 5