Строки с повторяющимися значениями столбцов

#sql #sql-server #database #tsql

#sql #sql-сервер #База данных #tsql

Вопрос:

Я уверен, что в таблице есть строки с повторяющимися значениями столбцов:

 SELECT
    TenancyReferralKey,
    FromDate,
    ToDate,
    ToDate_Value,
    ReferralID,
    ReferralFor,
    ReferralStatus
FROM dm.Dim_TenancyReferral
WHERE ReferralID IN ('1138', '1940', '1946')
ORDER BY ReferralID
  

введите описание изображения здесь

И я пытаюсь подсчитать количество строк с дублированными ReferralID :

 SELECT
    TenancyReferralKey,
    FromDate,
    ToDate,
    ToDate_Value,
    ReferralID,
    ReferralFor,
    ReferralStatus,
    COUNT(*) [Occurrences]
FROM dm.Dim_TenancyReferral
GROUP BY
    TenancyReferralKey,
    FromDate,
    ToDate,
    ToDate_Value,
    ReferralID,
    ReferralFor,
    ReferralStatus
HAVING COUNT(*) > 1
  

введите описание изображения здесь

Но получаю пустой результирующий набор.

Спасибо за вашу помощь.

Ответ №1:

Вы группируетесь по количеству неуникальных столбцов ( TenancyReferralKey , FromDate , ToDate , ToDate_Value ). Если вы удалите их, вы получите нужные вам дубликаты, например

 SELECT
    ReferralID,
    ReferralFor,
    ReferralStatus,
    COUNT(*) [Occurrences]
FROM dm.Dim_TenancyReferral
GROUP BY
    ReferralID,
    ReferralFor,
    ReferralStatus
HAVING COUNT(*) > 1
  

Ответ №2:

Отредактируйте COUNT инструкцию в своем запросе. COUNT(*) [Occurrences] подсчитывает количество строк в таблице при группировании по всем столбцам в GROUP BY инструкции. Таким образом, каждая строка имеет свой собственный набор значений (нет случаев, когда вся запись является дубликатом). Попробуйте

 WITH cte AS (
SELECT
    TenancyReferralKey,
    FromDate,
    ToDate,
    ToDate_Value,
    ReferralID,
    ReferralFor,
    ReferralStatus,
    COUNT(*) OVER (PARTITION BY ReferralID) AS Occurences
FROM dm.Dim_TenancyReferral
)
SELECT
    *
FROM
    cte
WHERE
   Occurences > 0
;
  

Комментарии:

1. Спасибо за эту разработку и показ CTE. Я посмотрю на OVER PARTITION BY ключевые слова and .