Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/44: Рейтинг темы: голосов - 44, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 13
1

Запрос на выборку с исключением повторяющихся строк

07.04.2010, 16:21. Показов 9070. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Столкнулся с еще одной проблемой. У меня есть представление, которое выводит данные из таблицы
SQL
1
2
3
4
SELECT PERCENT FULL_DESCRIPTION, NUMBER, FUEL, STATUS
FROM [airport].[dbo].[transport]
WHERE     (FUEL < 2.50) AND (STATUS = N'1')
ORDER BY FULL_DESCRIPTION, NUMBER, FUEL DESC
Данные выводятся в таком виде

Вертолёт(1) - 100 - 2,22 - 1
Вертолёт(1) - 156 - 1,70 - 1
Вертолёт(2) - 172 - 2,48 - 1
Вертолёт(2) - 1240 - 2,36 - 1
Самолёт(1) - 220 - 2,40 - 1
Самолёт(2) - 230 - 2,33 - 1
Самолёт(2) - 2240 - 2,01 - 1

и т.д.

Нужно вывести данные вот в таком виде

Вертолёт(1) - 100 - 2,22 - 1
- 156 - 1,70 - 1
Вертолёт(2) - 172 - 2,48 - 1
- 1240-2,36 - 1
Самолёт(1) - 220 - 2,40 - 1
Самолёт(2) - 230 - 2,33 - 1
- 2240 - 2,01 - 1

И посчитать кол-во заполненных полей FULL_DESCRIPTION (nvarchar).
Ума ни приложу, как это сделать? Изучать SQL только начинаю.
Буду благодарен за любую помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2010, 16:21
Ответы с готовыми решениями:

Запрос на выборку из строк
Добрый день уважаемые форумчане, пришел к вам за помощью. В универе задали курсовую, скоро...

Запрос на выборку строк с определенным окончанием
Задание: найти абонентов с окончанием фамилий на &quot;ий&quot; и &quot;ко&quot;. Выбираю со строки с ПИБом....

Запрос на выборку строк от начала до ненужной
Имеется таблица вида: 1 AAA 123 2 BBB 321 3 XXX 123 4 ССС 321 Нужен выбор записей с...

Запрос на выборку и подсчета количества строк
mysql_query(&quot;SELECT * FROM таблица WHERE условие&quot;,$db); Всего в таблице &quot;таблица&quot; 100 строк По...

12
390 / 229 / 11
Регистрация: 09.12.2009
Сообщений: 668
07.04.2010, 19:07 2
Создание хранимой процедуры на выборку...
Создаешь такую функцию группировки, а дальше
SQL
1
2
3
4
5
SELECT FULL_DESCRIPTION, func_gconcat(NUMBER + "-" + FUEL + "-" + STATUS)
FROM [airport].[dbo].[transport]
WHERE     (FUEL < 2.50) AND (STATUS = N'1')
GROUP BY FULL_DESCRIPTION
ORDER BY FULL_DESCRIPTION, NUMBER, FUEL DESC
0
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 13
07.04.2010, 23:20  [ТС] 3
Возникает такая ошибка при обработке функции

Conversion failed when converting the nvarchar value 'Самолет(1)' to data type int.
0
390 / 229 / 11
Регистрация: 09.12.2009
Сообщений: 668
08.04.2010, 01:48 4
Цитата Сообщение от vodakins Посмотреть сообщение
Conversion failed when converting the nvarchar value 'Самолет(1)' to data type int.
А где это оно у тебя в int конвертится?

Добавлено через 1 час 15 минут
Сразу сбрось код твоей функции и код запроса, где ты ее используешь
0
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 13
08.04.2010, 07:48  [ТС] 5
SQL
1
2
3
4
5
6
7
8
9
10
11
12
CREATE FUNCTION funcgconcat (@FULL_DESCRIPTION INT)
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @RESULT VARCHAR(8000);
SET @RESULT = '';
SELECT @RESULT = @RESULT + NUMBER + FUE + STATUS + ' ' 
FROM [dbo].[transport]
WHERE [FULL_DESCRIPTION] = @FULL_DESCRIPTION;
SET @RESULT = rtrim(@RESULT);
RETURN @RESULT
END
Сделал выборку как в примере по ссылке
0
168 / 142 / 1
Регистрация: 01.04.2010
Сообщений: 474
08.04.2010, 10:29 6
Первая строчка не корректна, ты не тот тип прописуешь - вместо int необходимо указать хотя-бы varchar(50)
1
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 13
18.04.2010, 21:41  [ТС] 7
Уважаемые форумчане задача усложнилась, буду благодарен за любую помощь. Есть такая таблица static с данными [airport_id] nvarchar(255), [lines_id] nvarchar(255), [settled_date] nvarchar(255), [full_description] nvarchar(255),[lines] nvarchar(255), [selections_id] nvarchar(255), [selections] nvarchar(255), [fuel] float, [lbs] float, [pass] float, [up_time] nvarchar(255), [down_time] nvarchar(255), [status] nvarchar(255).

Данные выводятся вот в таком виде
1, 1, 03-07-2008 19:40:30, seatle/newyork NWY 250, british airlines, 1 , boing747, 242, 2220, 125, 03-07-2008 19:40:30, 03-07-2008 23:40:30, 0.

В этой таблице более 15 млн. записей.

Нужно вывести вот так
[full_description],[lines],[selections_id],[selections],[fuel],[status]
где поле [fuel] меньше 350.

seatle/newyork NWY 250, british airlines, 1 , boing747, 242, 0
british airlines, 1 , boing747, 241, 0
iran airlines, 2 , il76, 300, 1
0
168 / 142 / 1
Регистрация: 01.04.2010
Сообщений: 474
19.04.2010, 11:20 8
Во первых: зачем ты почти все данные относиш к типу nvarchar(255) ?
для целочисленых цифр используй - int
для дат не то что желательно, а необходимо использовать - datetime

Каждое значение в nvarchar отяжеляет на один бит твою строку.
Значение 255 - ты указал что оно будет весить 255 бит, и не важно что слово может быть с 5 букв.. SQL допишет оставшиеся 250 символов пробелами.

Во вторых. какой критерий тебе нужен для вывода таблицы? я смотрю у тебя есть две даты, и исходя из этого у тебя один самолёт может быть сто раз в одном аэропорте но в разное время и тебе небось не интересно просматривать историю его полётов.

В третьих: попробуй разбить свою мега-таблицу на несколько составных - она у тебя не гибкая.
0
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 13
19.04.2010, 11:38  [ТС] 9
Проблема вся в том, что я импортирую данные из csv файла. Пробовал разные варианты, вот эти типы данных больше всего подошли. Файлов очень много.

Мне нужен запрос который выводит вот эти строки без повторений [full_description]
seatle/newyork NWY 250 .............................................
newyork/gamburg GBR 312............................................

что находится после вот этих данных меня в принципе не интересует, нужно только чтобы выполнялось условие по полю [fuel].

Да я понимаю, что таблица не гибкая и не соответствует правилам БД. Как провести преобразование таблицы с данными я ,к сожалению, не знаю.
0
168 / 142 / 1
Регистрация: 01.04.2010
Сообщений: 474
19.04.2010, 12:54 10
Ну насчёт импорта данных - ты что-то точно не так делаешь, помочь в этом я те не очень смогу - импорт данных это моя ахилесова пята, но вот остальное так сделай (если я правильно понял твою задачу):

T-SQL
1
2
3
4
select distinct
    [full_description],[lines],[selections_id],[selections],[fuel],[status]
from dbo.[static] 
where [fuel]<350
Только тут будет выводить все незадвоенные данные по всем полям.
0
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 13
19.04.2010, 14:32  [ТС] 11
Цитата Сообщение от Devil_FoX Посмотреть сообщение
Ну насчёт импорта данных - ты что-то точно не так делаешь, помочь в этом я те не очень смогу - импорт данных это моя ахилесова пята, но вот остальное так сделай (если я правильно понял твою задачу):

T-SQL
1
2
3
4
select distinct
    [full_description],[lines],[selections_id],[selections],[fuel],[status]
from dbo.[static] 
where [fuel]<350
Только тут будет выводить все незадвоенные данные по всем полям.
Получиться вот так:

seatle/newyork NWY 250 ..............................................
seatle/newyork NWY 250 .............................................
seatle/newyork NWY 250 .............................................
seatle/newyork NWY 250 .............................................
seatle/newyork NWY 250 .............................................
seatle/newyork NWY 250 .............................................
seatle/newyork NWY 250 .............................................
seatle/newyork NWY 250 .............................................
newyork/gamburg GBR 312............................................
newyork/gamburg GBR 312............................................
newyork/gamburg GBR 312............................................
newyork/gamburg GBR 312............................................

где вместо точек будут разные данные

мне же нужно посчитать кол-во строк, которые повторяются:
seatle/newyork NWY 250 это будет запись под номером 1
newyork/gamburg GBR 312 это будет запись под номером 2

и т.д.

Их более милиона.
0
168 / 142 / 1
Регистрация: 01.04.2010
Сообщений: 474
19.04.2010, 14:42 12
для того что бы посчитать кол-во повторений для поля [full_description] - вот запрос:
SQL
1
2
3
4
5
6
SELECT 
    [full_description],
    COUNT(*) AS povtor
FROM dbo.[static] 
WHERE [fuel]<350
GROUP BY [full_description]
1
390 / 229 / 11
Регистрация: 09.12.2009
Сообщений: 668
19.04.2010, 17:43 13
Цитата Сообщение от Devil_FoX Посмотреть сообщение
SQL допишет оставшиеся 250 символов пробелами.
Увы нет
Цитата Сообщение от Devil_FoX Посмотреть сообщение
В третьих: попробуй разбить свою мега-таблицу на несколько составных - она у тебя не гибкая.
Дадада... Точно замечено!
0
19.04.2010, 17:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2010, 17:43
Помогаю со студенческими работами здесь

Слияние массивов с исключением повторяющихся элементов
Запутался в немного. Дана задача: Составить описание класса одномерных массивов строк, каждая...

MySQL + PHP запрос на выборку уникальных строк по последней дате из двух таблиц
Подскажите где ошибка, выдает первую запись по дате, а не последнюю таблицы create table...

Сформировать массив из двух других массивов с исключением повторяющихся элементов
Дано 2 массива. Сформировать третий массив, включив в него все элементы, которые есть и в первом,...

Получить файл g, образованный из файла f исключением повторяющихся вхождений одного и того же числа
2. Дан файл f, содержащий целые числа. Получить файл g, образованный из файла f исключением...

Запрос с исключением
Выбрать список отделов, в которых нет ни одного сотрудника получающего зарплату больше 1000. ...

Запрос с исключением
Здравствуйте. Есть две таблицы: id1 | name 1 | a 2 | b 3 | c 4 | d 5 | e и


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru