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

问题描述:

我有两个表 ReviewProjectsReview。我想按列更改顺序而不影响结果。最初的订单是来自审查表的createdDate列。 初始查询如下。在包含列数据类型(如ntext)的连接查询中从一个表中获取不同的值

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行,只有评论表的列。 由于存在具有图像和ntext的数据类型,因此我无法在Review表中的所有列上应用group by。 有没有办法实现这一点,而无需将数据插入临时表并获取不同的值。

+2

添加一些样本表数据和预期的结果。 (作为格式化文本,而不是图像) – jarlh

+0

这可能是因为您的表格之间存在一对多的关系。您可以通过在连接上添加其他条件来避免获取额外条目,这将有助于过滤掉这些额外的两个条目。 – Vashi

试试这个

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