Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Сложный запрос №2 (SQL)  [new]
Alimkulov
Member

Откуда:
Сообщений: 774
Всем привет!
Нужна ваше помочь.

Ест таблицы:
Countryes
idCountryAbbrev.
177RUSSIANRU
228UZBEKISTANUZ

Airports
idAirportAirport Code
5904MOSCOW METROPOLITAN AREAMOW
10070YUZHNYTAS

cityes
idCitycountryID
5168MOSCOW177
7774TASHKEN228

Есть еще текст:
RUMOWUZTAS

Основания этого текста надо записать такая таблица:
Страна подачиГород подачиАэропорт подачиСтрана назначениеГород назначениеАэропорт назначение
RUSSIAN MOSCOWMOSCOW METROPOLITAN AREAUZBEKISTANTASHKENYUZHNY

Заранее спасибо!
6 дек 11, 18:18    [11715683]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Подстроки из строки извлекаются функцией SUBSTRING()
6 дек 11, 18:30    [11715793]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
netivan
Member

Откуда:
Сообщений: 8768
Alimkulov,

а текст без разделителей?
6 дек 11, 18:30    [11715795]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
netivan
Member

Откуда:
Сообщений: 8768
netivan
Alimkulov,

а текст без разделителей?

и еще - формат там определен? типа столько-то символов и тд.А иначе перебирать все варианты будет дико когда 10 млн записей...
6 дек 11, 18:31    [11715802]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Alimkulov
Member

Откуда:
Сообщений: 774
Glory
Подстроки из строки извлекаются функцией SUBSTRING()

netivan
и еще - формат там определен? типа столько-то символов и тд.А иначе перебирать все варианты будет дико когда 10 млн записей...

Текст имеет nvarchar(255)
чтоб получить RU надо писать
Substring('RUMOWUZTAS',1,2)
. Это мне понятно.
ну как запрос делит не могу!
6 дек 11, 18:40    [11715868]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alimkulov
ну как запрос делит не могу!

Почему не можете ? Рука не поднимается написать Substring() в запросе ?
6 дек 11, 18:43    [11715892]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Alimkulov
Member

Откуда:
Сообщений: 774
Glory
Alimkulov
ну как запрос делит не могу!

Почему не можете ? Рука не поднимается написать Substring() в запросе ?

Как в SELECT.
Там же три таблица. Еще раз посмотрите на таблицу!
6 дек 11, 18:48    [11715932]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
netivan
Member

Откуда:
Сообщений: 8768
Alimkulov,

а вы Join знаете?:) Или проблема в том чтобы сделать из 2 столбцов одну строку?
6 дек 11, 18:51    [11715966]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alimkulov
Как в SELECT.

Обыкновенно в SELECT. Вы знаете другую команду для выборки данных ?

Alimkulov
Там же три таблица

Хоть 333. Все равно придется писать SELECT.

Alimkulov
Еще раз посмотрите на таблицу!

Смотри не смотри, а все равно придется писать SELECT.
6 дек 11, 18:52    [11715971]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Alimkulov
Member

Откуда:
Сообщений: 774
netivan
Alimkulov,

а вы Join знаете?:) Или проблема в том чтобы сделать из 2 столбцов одну строку?

Этого я не знаю!
6 дек 11, 18:53    [11715990]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alimkulov
Этого я не знаю!

Ну так начните изучение
http://www.firststeps.ru/sql/
6 дек 11, 18:54    [11715995]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Glory
Member

Откуда:
Сообщений: 104751
И как это с прошлой темы - https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=899539&hl= - вы забыли, что такое join ?
6 дек 11, 18:55    [11716007]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Alimkulov
Member

Откуда:
Сообщений: 774
Если Вы нашли конкретно решение этого предложения, тогда напишите полный T/SQl код.
6 дек 11, 18:57    [11716019]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alimkulov
Если Вы нашли конкретно решение этого предложения, тогда напишите полный T/SQl код.

Деньги вперед.
6 дек 11, 18:57    [11716024]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Alimkulov
Member

Откуда:
Сообщений: 774
Glory,
Тогда эта форм зачем. Значит все мысли платны да?
6 дек 11, 20:32    [11716724]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1578
Alimkulov
Glory,
Тогда эта форм зачем. Значит все мысли платны да?
Платны не мысли, а их реализация. Написание говтового кода и есть реализация какой-то мысли.
6 дек 11, 20:54    [11716866]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Alimkulov
Member

Откуда:
Сообщений: 774
Sergey Sizov,
Если все знал бы, не обращал бы на этом форуме!

Вот я попробовал так:
SELECT     f.Country AS [Страна подачи], c.[City name] AS [Город подачи], a.[Airport name] AS [Город подачи],
           f.Country AS [Страна подачи], c1.[City name] AS [Город подачи], a1.[Airport name] AS [Город подачи]
FROM countres AS f 
JOIN  cityes AS c ON f.id = c.countryID
JOIN  cityes AS c1 ON f.id = c1.countryID
JOIN  airports AS a ON c.id = a.cityID
JOIN  airports AS a1 ON c1.id = a1.cityID

WHERE     (f.Abbrev = N'RU' OR a.[Airport Code]='MOW')
           AND
          (f.Abbrev = N'UZ' OR a1.[Airport Code]='TAS')

не получается.
Где пропустил ошибка?
6 дек 11, 21:21    [11717020]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
declare @Countries table (id int, Country varchar(100), Abbrev varchar(10));
insert into @Countries
 values
 (177, 'RUSSIAN', 'RU'),
 (228, 'UZBEKISTAN', 'UZ');

declare @Airports table (id int, Airport varchar(100), [Airport Code] varchar(10));
insert into @Airports
values
 (5904, 'MOSCOW METROPOLITAN AREA', 'MOW'),
 (10070, 'YUZHNY' ,'TAS');

declare @Cities table (id int, City varchar(100), CountryID int)
insert into @Cities
values
 (5168, 'MOSCOW', 177),
 (7774, 'TASHKEN', 228);
 
select
 c1.Country, ct1.City, a1.Airport, c2.Country, ct2.City, a2.Airport
from
 @Countries c1 cross join
 @Airports a1 cross join 
 @Countries c2 cross join
 @Airports a2 join
 @Cities ct1 on ct1.CountryID = c1.id join
 @Cities ct2 on ct2.CountryID = c2.id
where
 c1.Abbrev + a1.[Airport Code] + c2.Abbrev + a2.[Airport Code] = 'RUMOWUZTAS';
Т.к. маршрут закодирован без разделителей, то возможны коллизии. Например, добавьте такие данные и выполните запрос заново:
insert into @Countries
 values
 (178, 'RUSSIAN', 'RUM');

insert into @Airports
values
 (5905, 'MOSCOW METROPOLITAN AREA', 'OW');

insert into @Cities
values
 (5169, 'MOSCOW', 178);
6 дек 11, 21:28    [11717071]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Alimkulov
Member

Откуда:
Сообщений: 774
invm,
Спасибо что написали конкретно T/SQL код.
Я сделал как Вы написали, но у меня ошибка:

Msg 102, Level 15, State 1, Line 40
Incorrect syntax near ','.
Msg 102, Level 15, State 1, Line 46
Incorrect syntax near ','.
Msg 102, Level 15, State 1, Line 52
Incorrect syntax near ','.


В чем проблема? У меня SQL 2005 установлен.
6 дек 11, 21:53    [11717220]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Alimkulov
invm,
Спасибо что написали конкретно T/SQL код.
Я сделал как Вы написали, но у меня ошибка:

Msg 102, Level 15, State 1, Line 40
Incorrect syntax near ','.
Msg 102, Level 15, State 1, Line 46
Incorrect syntax near ','.
Msg 102, Level 15, State 1, Line 52
Incorrect syntax near ','.


В чем проблема? У меня SQL 2005 установлен.
INSERT ... VALUES (,...,...), (,...,...), .....
Это синтаксис SQL2008
Надо заменить на UNION ALL
6 дек 11, 21:58    [11717241]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Alimkulov
Member

Откуда:
Сообщений: 774
I
iap
NSERT ... VALUES (,...,...), (,...,...), .....
Это синтаксис SQL2008
Надо заменить на UNION ALL

Где именно заменить?
6 дек 11, 22:04    [11717275]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Aileron
Member

Откуда:
Сообщений: 13
Alimkulov,
Поищи на торретах вебинар по SQL от центра СПЕЦИАЛИСТ по курсу №M2778. Потратишь 2-3 дня, зато больше подобных вопросов возникать не будет.
6 дек 11, 22:20    [11717378]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Alimkulov
I
iap
NSERT ... VALUES (,...,...), (,...,...), .....
Это синтаксис SQL2008
Надо заменить на UNION ALL

Где именно заменить?
INSERT ... VALUES (,...,...), (,...,...), .....
===>
INSERT ... SELECT ,...,... UNION ALL SELECT ,...,... UNION ALL SELECT .............
6 дек 11, 22:29    [11717454]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
farw
Member

Откуда: Одесса
Сообщений: 6
Первый около десяти сообщений все дружно уговаривали автора написать запрос)))
6 дек 11, 23:09    [11717732]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос №2 (SQL)  [new]
Alimkulov
Member

Откуда:
Сообщений: 774
Всем спасибо! Нашел решения:
SELECT     c1.Country AS [Страна подачи], ct1.[City name] AS [Город подачи], a1.[Airport name] AS [Аэропорт подачи],
           c2.Country AS [Страна назначение], ct2.[City name] AS [Город назначение], a2.[Airport name] AS [Аэропорт назначение]
 FROM 
     countres AS c1 CROSS JOIN 
     airports AS a1 CROSS JOIN
     countres AS c2  CROSS JOIN
     airports AS a2 JOIN 
     cityes AS ct1  on ct1.countryID = c1.id AND ct1.id = a1.cityID JOIN 
     cityes AS ct2  on ct2.countryID = c2.id AND ct2.id = a2.cityID

WHERE     
     (c1.Abbrev = Substring('RUMOWUZTAS',1,2)/*RU*/ ) AND (a1.[Airport Code] =Substring('RUMOWUZTAS',3,3)/*MOW*/)
      AND
     (c2.Abbrev = Substring('RUMOWUZTAS',6,2)/*UZ*/) AND (a2.[Airport Code] = Substring('RUMOWUZTAS',8,3)/*UZ*/)

Страна подачиГород подачиАэропорт подачиСтрана назначениеГород назначениеАэропорт назначение
RUSSIANMOSCOWMOSCOW METROPOLITAN AREAUZBEKISTANTASHKENTYUZHNY

Получилась классно да?
Вот откуда научил https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=899539&hl
Всем до спасибо!
6 дек 11, 23:23    [11717784]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить