【问题标题】:SQL Server select distinct hellSQL Server 选择不同的地狱
【发布时间】:2011-01-15 21:15:53
【问题描述】:

我遇到了一个 sql 问题。我有一个包含许多重复条目的表,其列名如下:-

eventnumber housenumber value1 value2

这些列名都不是主键,因为有很多重复项。我想做的是通过不同的门牌号选择另一个表,但我似乎把整个表都复制了,我正在使用:-

Select * into temp_table from schedule_temp where housenumber in (select distinct housenumerb from schedule_temp)

现在我把它分解了一下,如果我这样做:-

Select distinct housenumber into temp from schedule_temp group by housenumber

我得到一个带有唯一门牌号的表...但是我如何使用这个唯一表来驱动另一个从 temp 中选择门牌号并仅从 schedule_temp 中获取门牌号实例的选择?希望这是有道理的。

如果你能拯救我的理智,我可以喝啤酒。

【问题讨论】:

  • 对于给定的 housenumbereventnumbervalue1value2 是否相同?如果不是,您想如何决定将哪个放入您的唯一 housenumbers 表中
  • 你的帖子也让我发疯。您能否重新表述得更清楚 - 特别是您能否发布一个真实的模式示例和您想要的最终数据(而不是半步)?
  • 抱歉,结果应该以唯一的门牌号显示。

标签: sql-server select distinct


【解决方案1】:

您不想要 DISTINCT 记录(例如,每条记录至少有一列与所有其他记录不同)。您希望从每个记录组(或分区)中选出一个获胜者。

SELECT *
FROM
(
  SELECT
    EventNumber, HouseNumber, Value1, Value2,
    ROW_NUMBER()
      OVER(PARTITION BY HouseNumber ORDER BY HouseNumber) as rowNum
  FROM ServiceAddr
) sub
WHERE sub.rowNum = 1

【讨论】:

    【解决方案2】:

    首先,我将数据放入具有自动增量 ID 的表中

    所以创建一个带有 id,eventnumber,housenumber,value1,value2 的表,其中 id 是一个自动编号。

    然后

    Insert Into NewTemp(eventnumber,housenumber,value1, value2)
    Select eventnumber,housenumber,value1, value2 From schedule_temp
    

    那么这个查询应该给你每栋房子 1 行 #

    Select nt.* From NewTemp nt
    Join (select max(id) as id, housenumber from NewTemp Group By housenumber) t on t.id=nt.id
    

    【讨论】:

    • 非常感谢布伦丹,它给了我按不同门牌号排序的数据,这就是我所追求的,但我如何将结果放入新表中?
    • Select * Into SomeNewTable From Table1
    • 谢谢,我早该知道...这是漫长的一天 :)
    猜你喜欢
    • 2011-02-20
    • 1970-01-01
    • 2014-06-13
    • 2017-01-21
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多