Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Прошу помощи в составлении запросов на выборку

Здравствуйте.
Прошу помощи в составлении запросов на выборку

Для простоты формулировки задачи я придумал такой пример.

Пункт	Друг1	Друг2
---------------------
1 Вася Коля
2 Коля Вася
3 Маша Лена
4 Лена Света
5 Степан Брунгильда
6 Степан Коля
7 Коля Степан

Как можно получить выборки, где

а) есть дружба в обе стороны, как у п.п. 1,2 и 6,7 (в выборке достаточно одной записи для каждой пары)
б) есть дружба в одну сторону, как у п.3 (т.е. второй друг обязательно должен присутствовать в поле Друг1 см п.4, но с другими парами)
в) дружба с отсутствующим в списке (не встречается в поле Друг1) , как у п. 4,5

Внимание - "Все совпадения с реальными людьми случайны а события вымышлены!" :-)
Ответ: Malyav, помощь в составлении - это значит, что вы запросы уже пытались составить и у вас не получилось.

Сейчас вы просите составить запросы вместо вас.

Все запросы - самые простые, единственное, что нужно знать - это что можно джойнить таблицу с самой собой. Дальше описание задачи уже содержит условие джойна и доп. условия на выборку, осталось их только перевести на язык SQL.
Вопрос: Правила составления запроса

Вопрос чисто теоретический. Собссно: Можно гдето посмотреть (может кто сталкивался с подобным вопросом) правила составления запросов, например:
1. В SELECT если есть функция такаято, значит таких то и таких больше быть не должно
2. В SELECT в разделе HAVING должна обьязательно быть использована функция, которая присутствует в самом SELECT...
3. В INSERT можно использовать исключительно оператор VALUES()
и.т.п.

Т.е. Мне нужна сама логика с как можно полным списком правил и ограничений.

Спасибо большое.
Ответ:
Цитата(Zorak @  20.8.2014,  00:42 )
на работе дали задачу написать парсер SQL запроса и выдать различные ошибки и ворнинги если они есть.

Берёшь справку. Там есть шаблон для любого типа запроса. Проверяешь соответствие запроса шаблону. 
Как вариант - берёшь текст готового парсера (скажем, из исходников MySQL) и адаптируешь под себя.

Цитата(Zorak @  19.8.2014,  22:16 )
1. В SELECT если есть функция такаято, значит таких то и таких больше быть не должно

Цитата(Zorak @  19.8.2014,  22:16 )
2. В SELECT в разделе HAVING должна обьязательно быть использована функция, которая присутствует в самом SELECT...

Цитата(Zorak @  19.8.2014,  22:16 )
3. В INSERT можно использовать исключительно оператор VALUES()

Все три утверждения неверны.
Вопрос: SOS! Как в SSIS полученные из Эксель данные преобразовать с помощью SQL запроса до загрузк

Помогите новичку! Гуглю 3-й день, не могу найти. Как в SSIS полученные из Эксель данные преобразовать с помощью SQL запроса перед загрузкой в OLE DB? В какой компоненте можно привязать этот запрос? Везде, где заметил место для запроса, везде только подключение к базе данных. Но как мне обработать полученный из Excel набор данных?
Ответ:
alexeyvg
magsimus13
a_voronin, уже нашел выход... там оказывается можно вызвать хранимую процедуру SQL, вместо текста запроса. Вот так элементарно
Эээ, а чем отличается вызов процедуры от вставки туда текста процедуры?
Пишите там что угодно, любые преобразования/вычисления, им даже обращения к другим серверам.

Или вы "запрос" в Execute SQL Task понимаете как SELECT ? :-)
У меня есть подозрение, что товарищ очень сильно плавает в базовых терминах. Ну что-ж пожелаем ему удачи на интервью.
А вообще, я бы с удовольствем посмотрел на вызов хранимой процедуры в Excel Connection. :-)
Вопрос: Фильтрация с помощью параметрического запроса

Господа, есть вопрос, можно ли организовать фильтрацию данных в форме (с помощью выпадающего списка) с помощью параметрического запроса без применения макросов или VBA?
Ответ:
NoAccess
__Michelle
Только вот лучше вместо подчиненного запроса - подчиненную форму.

В чем разница?
Хотя бы в имеющихся у формы возможностях обработки событий.
Вопрос: Требуется помощь в составлении запроса для двух таблиц

Добрый день!
Требуется помощь в составлении запроса для MS SQL.
Имеется две таблицы -Zayavki (с заявками для выезда к клиенту) и Baza (с данными о клиенте).
Таблица Zayavki состоит из поля с ID клиента . датой выезда и типов выезда (срочный или плановый) - с названием полей id_Klient , Data_Zaezda и Tip соответственно.
Таблица Baza состоит из Id клиента, его имени и адреса - id , Name_Klient, Adress соответственно.
Нужно сделать запрос, в результате которого отобразится 10 самых часто посещаемых клиентов с отображением типа выезда (срочный или плановый).

При таком запросе, я группирую заявки и вижу часто посещаемых клиентов в порядке убывания - но не вижу тип выезда и отображаются ВСЕ клиенты, а не ТОР-10. Прошу помочь знатоков!

SELECT Baza.Name_Klient, Baza.Adress, COUNT(Zayavki.id_Klient ) as Count_US
FROM Zayavki Left JOIN Baza ON Zayavki.id_Klient = Baza.id
WHERE (Zayavki.Data_Zaezda BETWEEN :datPass1 AND :datPass2)
GROUP BY Baza.Name_Klient, Baza.Adress
ORDER BY Count_US Desc, Baza.Name_Klient
Ответ: Сделал так:

with
cW as ( SELECT TOP (10) Baza.Name_Klient, Baza.Adress, COUNT(Zayavki.id_Klient ) as Count_US
FROM Zayavki Left JOIN Baza ON Zayavki.id_Klient = Baza.id
WHERE (Zayavki.Data_Zaezda BETWEEN :datPass1 AND :datPass2)
GROUP BY Baza.Name_Klient, Baza.Adress
ORDER BY Count_US Desc, Baza.Name_Klient ) -- TOP 10 клиентов

select b.Name_Klient, b.Adress, c.Cnt, c.Data_Zaezda, c.Tip from Zayavki as cD inner join Baza as b on c.id_Klient = b.id
Where (cD.ID IN (select top(10) ID from cW order by Count_US desc)) and (Data_Zaezda BETWEEN :datPass1 AND :datPass2)
ORDER BY b.Name_Klient;

Всем СПАСИБО!
Вопрос: Прошу помощи в составлении запроса

Возможно вопрос совсмем "для новичка", но я застрял..

Есть запрос SELECT
Он может вытаскивать из таблицы разное (зависит от случая) кол-во строк по три колонки (назовём их data1, data2 и data3)

Есть второй запрос SELECT
Он тоже вытаскивает из таблицы данные, но в качестве условия использует результаты первого запроса.

То есть:
#
SELECT
ID
FROM `table`

WHERE

Col1 = 'data1'

AND Col2 = 'data2'

AND Col3 = 'data3'
#

Всё бы работало, если бы првый зпрос всегда возвращал тоько одну строку.

Вариант IN() не подойдёт, т.к. IN выбирает произвольно. Он может взять data1 из первой возвращённой строки, одновремено с этим data2 из десятой, а data3 из пятой.
Мне нужна чёткая привязка data1, data2 и data3 к той строке, из которой они были извлечены.


PS/ Я ещё не разобрался с тем, как объединить оба select-запроса, но над этим буду думать после того как решу вышеописанную проблему.
Ответ:
Necrosss
Это плохо ?
При составлении запросов - очень. А вообще... ну, наверное, никак.
Вопрос: sys_refcursor в составлении запроса

Можно ли использовать переменную sys_refcursor в составлении запроса

т.е. вместо
begin
  open v_cursor for
    select dummy, cursor(select 1 id from dual) cr from dual;
end;
/


у нас есть уже открытый курсор, который и нужно поместить в конструкцию запроса
declare
  v_c   sys_refcursor;
begin
  open v_c for select 1 id from dual;

  open v_cursor for
    select dummy, v_c  cr from dual;
end;
/
Ответ: Retvit,

Да можно и так, лиж бы ручки не болели
with questions as (select 'question 1' QUESTION from dual union all
                   select 'question 2' QUESTION from dual union all
                   select 'question 3' QUESTION from dual) 
,responder as (select 'resp1' Name from dual union all
               select 'resp2' Name from dual union all
               select 'resp13' Name from dual)
,t2 as (
            select  xmlagg(xmlelement("responder",Name)) responders
              from  responder
           )
           
select  xmlserialize(
                     document
                     xmlelement(
                                "survey",
                                 xmlagg(xmlelement("responders", xmlattributes(QUESTION as "QUESTION"), responders))
                               )
                     indent size = 2
                    ) survey
  from  questions,
        t2

<survey>
  <responders QUESTION="question 1">
    <responder>resp1</responder>
    <responder>resp2</responder>
    <responder>resp13</responder>
  </responders>
  <responders QUESTION="question 2">
    <responder>resp1</responder>
    <responder>resp2</responder>
    <responder>resp13</responder>
  </responders>
  <responders QUESTION="question 3">
    <responder>resp1</responder>
    <responder>resp2</responder>
    <responder>resp13</responder>
  </responders>
</survey>
Вопрос: Помощь в составлении запроса

Здравствуйте!
Есть 2 таблицы
products
productID product_code name categoryID ...
123 code123 продукт123 1 ...
125 code125 продукт125 2 ...
... ... ... ... ...

product_options_values
optionID productID option_value ...
2 123 'Дэу' ...
24 123 'Ланос' ...
25 123 'Daewoo' ...
26 123 'Lanos' ...
... ... ... ...
2 125 'Ниссан' ...
24 125 'Санни' ...
25 125 'Nissan' ...
26 125 'Sunny' ...
... ... ... ...


Надо это представить в виде
код_продукта, маркаАНГ(option_value=25), модельАНГ(option_value=26), маркаРУ(option_value=2), модельРУ(option_value=24)

Как это можно сделать? Желательно при помощи одного запроса
Ответ: SuperStar88,

ну да, вариант.
Второй вариант -- по одному left join на каждый option, вместо подзапросов.
Вопрос: Нужна помощь с запросом. Группировка с секционированием.

Доброго дня,
Нужна помощь в составлении запроса.
Есть таблица:
CREATE TABLE [dbo].[Test] (
[Id] int IDENTITY(1, 1) NOT NULL,
[LineId] int NOT NULL,
[CategoryId] int NOT NULL)
ON [PRIMARY]

IdLineIdCategoryId
113
213
325
425
6118
10111


В поле LineId могут быть только два значения: 1 или 2.
Значения CategoryId - произвольные.

Нужно вывести информацию по последней категории в каждой линии: LineId, CategoryId, Quantity(количество записей с этой категорией). Последними являются записи с бОльшими Id.
Итог выполнения должен быть такой:

LineId CategoryId Quantity
1111
252
Ответ:
Сергей Шелест
iap,

Огромное спасибо. Пойду осмысливать. :)
Заодно тщательно проверьте на других возможных данных.
А то мало ли что...
Вопрос: Помощь с запросом

Всем привет!
Нужна помощь в составлении запроса.
Суть такова, что нужно подтянуть (выгрузить) в таблицу максимальные данные по полю Рейтинг.
По факту вместо NULL-вых значений должны подтянуться максимальные там, где они есть.
Вроде ка можно сделать через темповую таблицу у с условием...

Талица 1 Рейтинг Должно быть
Компания - 1 NULL 3
Компания - 1 1 1
Компания - 1 3 3
Компания - 2 NULL 7
Компания - 2 2 2
Компания - 2 3 3
Компания - 2 7 7
Компания - 2 6 6
Ответ:
ISNULL([Рейтинг], MAX([Рейтинг]) OVER (PARTITION BY [компания?]))