【问题标题】:Querying SQL table with different values in same column with same ID查询具有相同ID的同一列中具有不同值的SQL表
【发布时间】:2017-04-23 02:26:24
【问题描述】:

我有一个带有ID, First Name 和Last name 的SQL Server 2012 表。 ID 每个人都是唯一的,但由于历史提要中的错误,不同的人被分配了相同的 ID。

------------------------------
    ID  FirstName   LastName
------------------------------    
    1    ABC         M
    1    ABC         M
    1    ABC         M
    1    ABC         N
    2    BCD         S
    3    CDE         T
    4    DEF         T
    4    DEG         T

在这种情况下,ID’s 1 的人是不同的(他们的姓氏明显不同),但他们拥有相同的ID。如何查询并获得结果?本例中的表有数百万行。如果它是一个较小的表,我可能会用count > 1 查询所有ID’s 并在excel 中过滤它们。

我要做的是,获取已分配给两个不同用户的所有此类ID's 的列表。

任何想法或帮助将不胜感激。

编辑:我认为我没有很好地提出这个问题。

有两个 ID 多次出现。 1 和 4。id 为 4 的行是相同的。我不希望这出现在我的结果中。 ID 为 1 的行,1 行虽然名字相同,但姓氏不同。我只想要那些 ID 相同但名字或姓氏中的一个不同的 ID。

我尝试将多次出现的 ID 加载到临时表中,并尝试将其与父表进行比较,尽管未成功。我可以尝试和实施其他任何想法吗?

【问题讨论】:

  • 你想得到什么结果?
  • 对不起。我不是很清楚。刚刚编辑了问题。
  • 重新看了你的问题后,我更加困惑了。您说“ID 为 4 的行是相同的”。与您提供的数据相比,这不是真的 (DEF <> DEG)。

标签: sql sql-server windows sql-server-2012 querying


【解决方案1】:
SELECT
    ID
FROM
    <<Table>>
GROUP BY
    ID
HAVING
    COUNT(*) > 1;

【讨论】:

  • 感谢您抽出宝贵时间,但我正在寻找不同的东西。我意识到我的问题并不完整。所以,我刚刚更新了它:)
【解决方案2】:
SELECT *
FROM myTable
WHERE ID IN (
      SELECT ID
      FROM myTable
      GROUP BY ID
      HAVING MAX(LastName) <> MIN(LastName) OR MAX(FirstName) <> MIN(FirstName) 
      )
ORDER BY ID, LASTNAME

【讨论】:

  • 感谢您抽出宝贵时间,但我正在寻找不同的东西。我意识到我的问题并不完整。所以,我刚刚更新了它:)
猜你喜欢
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
相关资源
最近更新 更多