J'ai utilisé plusieurs colonnes dans l'instruction Partition By by dans SQL, mais les lignes en double sont renvoyées. Je veux seulement que des lignes distinctes soient renvoyées.
C'est ce que j'ai codé dans Partition By:
SELECT DATE, STATUS, TITLE, ROW_NUMBER() OVER (PARTITION BY DATE, STATUS, TITLE ORDER BY QUANTITY ASC) AS Row_Num
FROM TABLE
C'est la sortie que je reçois actuellement: (Où il y a duplicate lignes retournées - Veuillez vous référer aux lignes 6 à 8 )
Voici le résultat que je souhaite obtenir: ( pas de doublon ligne renvoyée - veuillez vous reporter aux lignes 6 à 8 )
Question : Comment puis-je placer plusieurs colonnes in 1 Partition By et Ensure No Duplicate La ligne est renvoyée?
Appréciez si quelqu'un peut me fournir de l'aide à ce sujet, merci beaucoup !!
Si vos colonnes de table contiennent des données en double et si vous appliquez directement row_ number () et créez PARTITION sur une colonne, vous risquez d'obtenir une ligne dupliquée et une valeur de numéro de ligne.
Pour supprimer les lignes en double, vous avez besoin d'une autre requête INNER dans la clause from, qui élimine les lignes en double. Elle produira ensuite la sortie vers la clause FROM la plus externe, où vous pouvez appliquer PARTITION et ROW_NUMBER ().
Comme exemple ci-dessous:
SELECT DATE, STATUS, TITLE, ROW_NUMBER() OVER (PARTITION BY DATE, STATUS, TITLE ORDER BY QUANTITY ASC) AS Row_Num
FROM (
SELECT DISTINCT <column names>...
) AS tbl
Essayez ceci, Cela a fonctionné pour moi
SELECT * FROM (
SELECT
[Code],
[Name],
[CategoryCode],
[CreatedDate],
[ModifiedDate],
[CreatedBy],
[ModifiedBy],
[IsActive],
ROW_NUMBER() OVER(PARTITION BY [Code],[Name],[CategoryCode] ORDER BY ID DESC) rownumber
FROM MasterTable
) a
WHERE rownumber = 1
Je créerais un cte et ferais une jointure interne. Ce n'est pas efficace mais c'est pratique
with table as (
SELECT DATE, STATUS, TITLE, ROW_NUMBER()
OVER (PARTITION BY DATE, STATUS, TITLE ORDER BY QUANTITY ASC) AS Row_Num
FROM TABLE)
select *
from table t
join select(
max(Row_Num) as Row_Num
,DATE
,STATUS
,TITLE
from table
group by date, status, title) t2
on t2.Row_Num = t.Row_Num and t2
and t2.date = t.date`enter code here`
and t2.title = t.title