Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Hapus catatan Duplikat dari tampilan

Anda harus memiliki catatan duplikat untuk beberapa/semua Nomor Keluhan, jadi gunakan DISTINCT tidak akan berfungsi. Pertimbangkan tabel sederhana seperti

Column1    |    Column2
-----------+------------
A          |    X
A          |    Y

Jika Anda hanya menginginkan satu record untuk Column1 =A, SQL tidak memiliki cara untuk mengetahui apakah akan menempatkan X atau Y di Column2. Ini adalah masalah yang sama yang Anda alami tetapi dengan 19 kolom, bukan 2. Anda perlu menerapkan semacam logika tentang bagaimana memutuskan baris mana yang akan ditampilkan untuk setiap Nomor Keluhan. Jadi untuk tabel di atas jika saya ingin X ditampilkan di Kolom2 saya akan menggunakan kueri berikut:

SELECT  Column1,
        Column2
FROM    (   SELECT  Column1,
                    Column2,
                    ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber]
            FROM    MyTable
        ) t
WHERE   RowNumber = 1

Di sini saya menggunakan ROW_NUMBER() berfungsi untuk memprioritaskan setiap baris, lalu hanya menampilkan satu dengan prioritas tertinggi. Jika saya tidak peduli dengan urutan apa mereka keluar, saya mungkin menggunakan sesuatu seperti ini untuk memilih baris acak.

ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]

Karena saya tidak tahu logika apa yang harus diterapkan pada kueri Anda, saya tidak dapat memposting apa yang Anda butuhkan, tetapi saya dapat mencoba dan membantu Anda memulai:

SELECT  [Complaint Number],
        [Complaint_For],
        [Total_Complaint_Qty],
        [Defects],
        [Customer Code ],
        [Location],
        [CutomerName],
        [KUNUM],
        [QMNUM],
        [Responsible_KAM]
FROM    (   SELECT  [Complaint Number],
                    [Complaint_For],
                    [Total_Complaint_Qty],
                    [Defects],
                    [Customer Code ],
                    [Location],
                    [CutomerName],
                    [KUNUM],
                    [QMNUM],
                    [Responsible_KAM],
                    ROW_NUMBER() OVER(PARTITION BY [Complaint Number] ORDER BY Complaint_For, Defects) AS RowNumber
            FROM    [CCCMPREPOSITORY].[dbo].[VW_Final_]
        ) data
WHERE   RowNumber = 1

Anda hanya perlu mengutak-atik ORDER BY dalam ROW_NUMBER fungsi yang sesuai dengan kebutuhan Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 Cara Mengembalikan Nama Server di SQL Server (T-SQL)

  2. Pemecahan Masalah SQL Server Selalu Di Grup Ketersediaan

  3. Bagaimana cara memeriksa string Is not Null Dan Is not Empty di SQL server?

  4. Rencana eksekusi SQL Server — apa itu dan bagaimana itu membantu masalah kinerja?

  5. Cara memasukkan Daftar C# ke database menggunakan Dapper.NET