SQLのPartition Byステートメントで複数の列を使用しましたが、重複した行が返されます。個別の行のみが返されるようにしたい。
これは、Partition Byでコーディングしたものです。
SELECT DATE, STATUS, TITLE, ROW_NUMBER() OVER (PARTITION BY DATE, STATUS, TITLE ORDER BY QUANTITY ASC) AS Row_Num
FROM TABLE
これは私が現在取得している出力です:(duplicate行が返される場所-行6を参照してください8)
これは私が達成したい出力です:(重複なし行が返されます-行6から8を参照してください)
質問:複数の列を1 Partition Byand EnsureNo DuplicateRow is Returned?
誰かがこれについて助けてくれることを感謝します、ありがとうございます!!
これを試して、それは私のために働いた
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
テーブルの列に重複データが含まれていて、row_number()を直接適用して列にPARTITIONを作成すると、行が重複し、行番号の値が含まれる可能性があります。
重複する行を削除するには、from句にINNERクエリがもう1つ必要です。これにより、重複する行が削除され、PARTITIONとROW_NUMBER()を適用できる最も重要な外側のFROM句に出力が提供されます。
以下の例のように:
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
Cteを作成し、内部結合を行います。効率的ではありませんが、便利です
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