从包含列数据类型(如ntext)的连接查询中的一个表中获取不同的值

问题描述 投票:0回答:1

我有两张桌子ReviewProjectsReview。我想按列更改顺序而不影响结果。初始订单是来自评论表的createdDate列。初始查询如下。

SELECT
  *
FROM Review r
WHERE (status IS NULL
OR fstatus = '')
AND (crBy = '100'
OR crByPr = '')
ORDER BY createdDate

查询返回8行。

用户想要使用另一个表中的程序名来更改顺序。获得相同的查询如下。

SELECT
  r.*
FROM Review r
INNER JOIN ProjectsReview rp
  ON rp.rID = r.rID
WHERE (status IS NULL
OR fstatus = '')
AND (crBy = '100'
OR crByPr = '')
ORDER BY prNo, prName

这将返回10行。但是所需的结果只有8行且只有评论表的列。我无法对Review表中的所有列应用group by,因为有data和ntext的数据类型。有没有办法实现这一点,而无需将数据插入临时表并获得不同的值。

sql sql-server
1个回答
1
投票

试试这个

with cte
as
(
    select
        rn = row_number() over(partition by rID order by prNo,prName),
        rID,
        prNo,
        prName
        from ProjectsReview
)
SELECT r.*
    FROM  Review r  
    inner join cte rp on rp.rID =r.rID
    WHERE (status IS NULL OR fstatus = '') AND (crBy = '100' OR crByPr = '')
        and cte.rn = 1
    ORDER BY prNo,prName
© www.soinside.com 2019 - 2024. All rights reserved.