【问题标题】:Select Distinct has Duplicates选择不同的有重复项
【发布时间】:2023-02-07 06:07:17
【问题描述】:

我有一个明显产生重复的查询,但我不明白为什么,因为我在这里使用了 DISTINCT 选项。

我刚刚将 SQL 服务器从一个正在运行的 SQL 版本 12.0.6329.1 迁移到 13.0.6419.1(我相信是 2014 年到 2016 年) 而且我在旧服务器上没有遇到同样的问题。

任何想法为什么 DISTINCT 不能作为 [我] 预期的?

SELECT DISTINCT
 [UWI_vn]
,[WI_PrdWellCnt]
,[AAV_GUID]
,[InResFlag]
FROM [AAV_WellStore].[dbo].[V_ResultsProdBdgtOpsUpLiveBaseV4.5]
WHERE [InResFlag] =1
AND [WI_PrdWellCnt] > 0
AND [UWI_vn] = '102/16-25-069-05W6/0'

【问题讨论】:

  • 尝试散列每一行,看看值是否相同:binary_checksum( [UWI_vn] ,[WI_PrdWellCnt] ,[AAV_GUID] ,[InResFlag])
  • 在提问时,您需要提供 minimal reproducible example: (1) DDL 和样本数据填充,即 CREATE table(s) 加上 INSERT T-SQL 语句。 (2) 您需要做什么,即逻辑和您的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上面 #1 中的示例数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。问题中的所有内容都是文本,没有图像。
  • [WI_PrdWellCnt] 是什么数据类型?它可能是像FLOAT这样的近似数字类型吗?
  • @KickingAustin 一次对每个字段进行校验和以找到不同的字段。
  • 不确定这是否清楚,但是像 float 这样的近似数字将不是唯一的。如果您正在进行任何类型的精确比较,请存储为小数。浮点数用于速度和近似值。

标签: sql sql-server sql-server-2016


【解决方案1】:

感谢 dfundako 的校验和技巧以及 ThorstenKettner 和 KeithL 提出浮点列的固有属性。

[WI_PrdWellCnt] 列是一个浮点数,它通过一个 CTE,该 CTE 将数百行聚合到一行。这个平均值一定是导致问题的原因。如果所有值都相同,您会期望平均值相同,但它们并非如此。我们已将此值分解并单独计算,因此我们不必处理此问题。

将 [WI_PrdWellCnt] 转换为 Decimal 也可能解决该问题。这些表是由专有应用程序生成的,因此无法更改基表。

【讨论】:

    【解决方案2】:

    可能值得尝试检查数据类型并尝试使用 TRIM 去除多余的空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2016-10-22
      • 1970-01-01
      • 2019-04-12
      • 2015-11-17
      • 1970-01-01
      相关资源
      最近更新 更多