简体   繁体   中英

Get Distinct values from one table in a join query containing column data type like ntext

I have two tables Review and ProjectsReview . I want to change the order by columns without impacting the result. Initial order by was on createdDate column from review table. Initial query is as below.

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

The query returns 8 rows.

The user wants to change the order by using program name which is in another table. The query to get the same is as below.

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

This returns 10 rows. But the required result is only 8 rows and only columns of review table. I cannot apply group by on all the columns from Review table since there are data types with image and ntext. Is there a way to achieve this without inserting the data to a temp table and get distinct values.

Try this

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM