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

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

DISTINCT няма да ви помогне, ако редовете имат колони, които са различни. Очевидно една от таблиците, към които се присъединявате, има няколко реда за един ред в друга таблица. За да върнете един ред обратно, трябва да премахнете другите няколко реда в таблицата, към която се присъединявате.

Най-лесният начин да направите това е да подобрите вашата клауза where или ограничението JOIN, за да се присъедините само към единичния запис, който искате. Обикновено това изисква определяне на правило, което винаги ще избира „правилния“ запис от другата таблица.

Нека приемем, че имате прост проблем като този:

Person:  Jane
Pets: Cat, Dog

Ако създадете обикновено присъединяване тук, ще получите два записа за Джейн:

Jane|Cat
Jane|Dog

Това е напълно правилно, ако вашата гледна точка е да изброите всички комбинации от хора и домашни любимци. Въпреки това, ако вашият изглед вместо това трябваше да изброява хора с домашни любимци или да изброява хора и да показва един от техните домашни любимци, вие попаднахте на проблема, който имате сега. За целта ви трябва правило.

SELECT Person.Name, Pets.Name
FROM Person
  LEFT JOIN Pets pets1 ON pets1.PersonID = Person.ID
WHERE 0 = (SELECT COUNT(pets2.ID) 
             FROM Pets pets2
             WHERE pets2.PersonID = pets1.PersonID
                AND pets2.ID < pets1.ID);

Това прави прилагането на правило за ограничаване на записа за домашни любимци в присъединяването към домашния любимец с най-нисък идентификатор (първо в таблицата за домашни любимци). Клаузата WHERE по същество казва „където няма домашни любимци, принадлежащи на едно и също лице с по-ниска стойност на ID).

Това би довело до резултат с един запис:

Jane|Cat

Правилото, което ще трябва да приложите към вашия изглед, ще зависи от данните в колоните, които имате, и кой от „множеството“ записи трябва да се показва в колоната. Това обаче ще доведе до скриване на някои данни, което може да не е това, което искате. Например горното правило скрива факта, че Джейн има куче. Това кара да изглежда така, сякаш Джейн има само котка, когато това не е правилно.

Може да се наложи да преосмислите съдържанието на вашия изглед и това, което се опитвате да постигнете с него, ако започнете да филтрирате валидни данни.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да вмъкна таблица с данни в таблица на база данни на SQL Server?

  2. Изчисляване на MD5 хеш на UTF8 низ

  3. Използвайте FILEGROUP_ID(), за да върнете идентификатора на файлова група в SQL Server

  4. Таблици на SQL Server, именувани с dbo схема

  5. SQL Server и уязвимостите Spectre/Meltdown