SQL Server выбирает особый ад - PullRequest
       5

SQL Server выбирает особый ад

2 голосов
/ 11 февраля 2010

Я застрял на проблеме с 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? Надеюсь, что это имеет смысл.

Пиво на мне, если вы можете спасти мое здравомыслие.

Ответы [ 2 ]

1 голос
/ 11 февраля 2010

Вам не нужны записи 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
0 голосов
/ 11 февраля 2010

Сначала я получу данные в таблицу с идентификатором автоматического приращения

Итак, создайте таблицу с идентификатором, номером события, номером дома, значением1, значением2, где идентификатор является автоматическим номером.

Тогда

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
...