Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Usuń zduplikowane rekordy z widoku

Musisz mieć zduplikowane rekordy dla niektórych/wszystkich numerów skarg, więc użyj DISTINCT nie będzie działać. Rozważ prostą tabelę, taką jak

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

Jeśli chcesz mieć tylko jeden rekord dla Kolumna1 =A, SQL nie ma możliwości sprawdzenia, czy umieścić X czy Y w Kolumnie2. Jest to ten sam problem, który masz, ale z 19 kolumnami, a nie 2. Musisz zaimplementować jakąś logikę, aby zdecydować, który wiersz będzie wyświetlany dla każdego numeru skargi. Więc dla powyższej tabeli, gdybym chciał, aby X wyświetlał się w kolumnie 2, użyłbym następującego zapytania:

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

Tutaj używam ROW_NUMBER() funkcja priorytetyzacji każdego wiersza, a następnie wyświetlanie tylko tego o najwyższym priorytecie. Jeśli nie obchodziło mnie, w jakiej kolejności wychodzą, mogę użyć czegoś takiego, aby wybrać losowy rząd.

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

Ponieważ nie wiem, jaką logikę zastosować do twojego zapytania, nie mogę opublikować dokładnie tego, czego potrzebujesz, ale mogę spróbować i zacząć:

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

Musisz tylko pobawić się z ORDER BY w ROW_NUMBER funkcja dopasowana do Twoich potrzeb.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Scal dwie partycje w jedną w programie SQL Server (T-SQL)

  2. Jaki typ danych powinien być używany do przechowywania numerów telefonów w SQL Server 2005?

  3. SQL Server - połącz się z uwierzytelnianiem Windows

  4. Wysoka dostępność programu SQL Server:Dodaj nowy dysk do istniejącego wystąpienia klastra pracy awaryjnej

  5. Zakres dat przypadający między dwiema datami w zapytaniu LINQ