Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Премахване на дублирани записи от изглед

Трябва да имате дублиращи се записи за някои/всички номера на жалби, така че използвайте DISTINCT няма да работи. Помислете за проста таблица като

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

Ако искате само един запис за Колона1 =A, SQL няма как да разбере дали да постави X или Y в Колона2. Това е същият проблем, който имате, но с 19 колони, а не 2. Трябва да приложите някаква логика за това как да решите кой ред ще се показва за всеки номер на жалба. Така че за горната таблица, ако исках X да се показва в колона2, бих използвал следната заявка:

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

Тук използвам ROW_NUMBER() функция за приоритизиране на всеки ред, след което показва само този с най-висок приоритет. Ако не ме интересуваше в какъв ред излизат, можех да използвам нещо подобно, за да избера произволен ред.

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

Тъй като не знам каква логика да приложа към вашето запитване, не мога да публикувам точно това, от което се нуждаете, но мога да се опитам да ви помогна да започнете:

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

Просто ще трябва да си поиграете с ORDER BY в рамките на ROW_NUMBER функция, за да отговаря на вашите нужди.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DevOps решения за автоматизация на разработка на бази данни

  2. Кога бихте използвали функция с таблично значение?

  3. Премахнете странните знаци ( A с шапка) от колоната varchar на SQL Server

  4. Използване на INNER JOIN за комбиниране на таблици на SQL Server и показването им в ASP.NET уебформи

  5. Как мога да направя контрол на версиите на схемата на базата данни?