Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос, убирающий повторы строк по значениям в одном стобце. / 12 сообщений из 12, страница 1 из 1
21.09.2018, 05:56
    #39705931
AlexCalm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, убирающий повторы строк по значениям в одном стобце.
Всем привет, возникли следующие вопросы по запросам к базе данных. Перерыл интернет, лаконичных решений не нашел, надеюсь на вашу помощь.

Есть таблица данных T1 следующего вида:

Номер | Машина | Модель
1 | Тойота | Камри
2 | Лексус | RX330
3 | Тойота | Королла
4 | Ниссан | Патрол
5 | Ниссан | Кашкай

В результате запроса нужно получить таблицу в которой только первые значения по столбцу Машина, повторы не выводить. Получить нужно такую таблица T2:

Номер | Машина | Модель
1 | Тойота | Камри
2 | Лексус | RX330
4 | Ниссан | Патрол

Я пробовал через DISTINCT и GROUP BY, но это работает только если вывожу один столбец Машина, если беру все столбцы таблицы, не работает. В сети находил решения, но все они трехэтажные, неужели нет простого решения?
...
Рейтинг: 0 / 0
21.09.2018, 06:11
    #39705933
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, убирающий повторы строк по значениям в одном стобце.
AlexCalmВсем привет, возникли следующие вопросы по запросам к базе данных. Перерыл интернет, лаконичных решений не нашел, надеюсь на вашу помощь.

Есть таблица данных T1 следующего вида:

Номер | Машина | Модель
1 | Тойота | Камри
2 | Лексус | RX330
3 | Тойота | Королла
4 | Ниссан | Патрол
5 | Ниссан | Кашкай

В результате запроса нужно получить таблицу в которой только первые значения по столбцу Машина, повторы не выводить. Получить нужно такую таблица T2:

Номер | Машина | Модель
1 | Тойота | Камри
2 | Лексус | RX330
4 | Ниссан | Патрол

Я пробовал через DISTINCT и GROUP BY, но это работает только если вывожу один столбец Машина, если беру все столбцы таблицы, не работает. В сети находил решения, но все они трехэтажные, неужели нет простого решения?
двухэтажное с row_number()
одноэтажное с row_number () и top 1 with ties
Только вот зря вы эффективность решения по этажности оцениваете
...
Рейтинг: 0 / 0
21.09.2018, 06:29
    #39705936
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, убирающий повторы строк по значениям в одном стобце.
Код: sql
1.
2.
3.
with x as ( select Номер = min(Номер),  Машина from T1 group by  Машина )
  select T1.*
     from x left outer join T1 on T1.Номер = x.Номер and T1.Машина = x.Машина
...
Рейтинг: 0 / 0
21.09.2018, 06:56
    #39705940
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, убирающий повторы строк по значениям в одном стобце.
AlexCalm,

TOP 1 WITH TIES с сортировкой по ROW_NUMBER() OVER(partition by Машина order by Номер)
...
Рейтинг: 0 / 0
21.09.2018, 10:35
    #39706003
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, убирающий повторы строк по значениям в одном стобце.
Код: sql
1.
2.
WITH CTE AS (SELECT N=ROW_NUMBER()OVER(PARTITION BY Машина ORDER BY Номер),* FROM T1)
SELECT * FROM CTE WHERE N=1;
...
Рейтинг: 0 / 0
21.09.2018, 10:39
    #39706007
AlexCalm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, убирающий повторы строк по значениям в одном стобце.
Спасибо за помощь, но, как я понимаю, все предложенное выше использует колонку Номер. А если такой колонки нет?

Машина | Модель
Тойота | Камри
Лексус | RX330
Тойота | Королла
Ниссан | Патрол
Ниссан | Кашкай

Как получить такой результат в этом случае?

Машина | Модель
Тойота | Камри
Лексус | RX330
Ниссан | Патрол

PS Н-да, для элементарной вещи нет стандартной функции. Теперь боюсь даже спрашивать про аналог функции ВПР из екселя, там наверно 3 страницы кода будет.
...
Рейтинг: 0 / 0
21.09.2018, 10:44
    #39706010
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, убирающий повторы строк по значениям в одном стобце.
AlexCalmА если такой колонки нет?
Как получить такой результат в этом случае?А вот в этом случае, от вас потребуется объяснение почему, например, для Тойота нужно оставить именно Камри, а не Королла ?

пс
сразу предупреждаю, ответ "потому что она первая" не канает :)
Эт тебе не Эксель ...
...
Рейтинг: 0 / 0
21.09.2018, 10:44
    #39706011
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, убирающий повторы строк по значениям в одном стобце.
AlexCalmСпасибо за помощь, но, как я понимаю, все предложенное выше использует колонку Номер. А если такой колонки нет?

Машина | Модель
Тойота | Камри
Лексус | RX330
Тойота | Королла
Ниссан | Патрол
Ниссан | Кашкай

Как получить такой результат в этом случае?

Машина | Модель
Тойота | Камри
Лексус | RX330
Ниссан | Патрол

PS Н-да, для элементарной вещи нет стандартной функции. Теперь боюсь даже спрашивать про аналог функции ВПР из екселя, там наверно 3 страницы кода будет.
Код: sql
1.
2.
WITH CTE AS (SELECT N=ROW_NUMBER()OVER(PARTITION BY Машина ORDER BY Модель),* FROM T1)
SELECT * FROM CTE WHERE N=1;

А вообще, включите мозг. Достаточно понять, зачем в OVER() должен быть ORDER BY.
И не надо рыть Интернет - всё это есть на этом форуме. Было сто раз.
...
Рейтинг: 0 / 0
21.09.2018, 11:18
    #39706032
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, убирающий повторы строк по значениям в одном стобце.
AlexCalmтолько первые значения по столбцу МашинаПонятие "первый" существует лишь после того, как указана сортировка по выражению, согласно которому записи уникальны:
courtпс
сразу предупреждаю, ответ "потому что она первая" не канает :)
Эт тебе не Эксель ...
Какая же используется сортировка в показанном примере?
...
Рейтинг: 0 / 0
21.09.2018, 11:20
    #39706034
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, убирающий повторы строк по значениям в одном стобце.
PS. Я нашёл возможную сортировку - ORDER BY [Машина],SUBSTRING([Модель],3,1) . Но интуиция подсказывает, что на деле всё не так...
...
Рейтинг: 0 / 0
21.09.2018, 12:50
    #39706074
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, убирающий повторы строк по значениям в одном стобце.
AlexCalmКак получить такой результат в этом случае?
— Скажите, пожалуйста, куда мне отсюда идти?
— А куда ты хочешь попасть? — ответил Кот.
— Мне все равно... — сказала Алиса.
— Тогда все равно, куда и идти, — заметил Кот.
— ...только бы попасть куда-нибудь, — пояснила Алиса.
— Куда-нибудь ты обязательно попадешь, — сказал Кот.
...
Рейтинг: 0 / 0
23.09.2018, 21:00
    #39706668
DaniilSeryi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, убирающий повторы строк по значениям в одном стобце.
AlexCalm,

Вот это - трёхэтажный вариант или сойдёт?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select *
from t
inner join 
	(select min(Номер) as МН
	 from t
	 group by Машина
	) as a
on t.Номер=МН
order by Номер
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос, убирающий повторы строк по значениям в одном стобце. / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]