【问题标题】:Rows with duplicate column values具有重复列值的行
【发布时间】:2020-09-24 03:22:24
【问题描述】:

我很确定表中存在具有重复列值的行:

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

但是得到空的结果集。

感谢您的帮助。

【问题讨论】:

    标签: sql sql-server database tsql


    【解决方案1】:

    您正在按多个非唯一列(TenancyReferralKeyFromDateToDateToDate_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
      ;
      

      【讨论】:

      • 感谢您的详细说明和展示 CTE。我会看看OVERPARTITION BY 关键字。
      猜你喜欢
      • 2021-10-04
      • 2014-05-08
      • 2021-05-28
      • 2018-05-09
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多