Страница 1 из 1

Вложенный запрос SELECT ... FROM (SELECT ...)

Добавлено: 26 мар 2007, 01:40
Батор
вопрос: поддерживает ли IB7.5 конструкции типа SELECT ... FROM (SELECT ...)?

если не поддерживает, то подскажите как решить такую задачу:
есть справочник сотрудников, в нем ФИО разбито на 3 поля
нужно сделать выборку с группировкой по сотрудникам, что-то вроде

SELECT name_last ||' '|| name_first ||' '|| name_middle Name, COUNT(*) col FROM sometable LEFT JOIN spr_user ON spr_iser.id_user=sometable.id_user
WHERE ...
GROUP BY name_last ||' '|| name_first ||' '|| name_middle

проблема в том, что не дает делать группировку по name_last ||' '|| name_first ||' '|| name_middle и по Name тоже не дает, поэтому пытался сделать с помощью вложенного запроса, чтобы сгруппировать.

или можно как-то по-другому решить эту проблему?

можно, конечно, view сделать, но у меня общий вопрос про группировку по составному текстовому полю и возможность вложенного запроса.

Re: Вложенный запрос SELECT ... FROM (SELECT ...)

Добавлено: 26 мар 2007, 11:56
WildSery
Батор писал(а):поддерживает ли IB7.5 конструкции типа SELECT ... FROM (SELECT ...)?
Если он у тебя стоит (раз ты задачу для него решаешь), то как насчёт попробовать?
А ещё попробуй GROUP BY 1

Re: Вложенный запрос SELECT ... FROM (SELECT ...)

Добавлено: 26 мар 2007, 23:15
Батор
WildSery писал(а):Если он у тебя стоит (раз ты задачу для него решаешь), то как насчёт попробовать?
пробовал - чего-то не выходит... но может я чего не знаю, например в MSSQL для этого обязательно надо AS добавлять: SELECT ... FROM (SELECT ...) AS Something
WildSery писал(а): А ещё попробуй GROUP BY 1
для ORDER BY срабатывает, а для GROUP BY нет :(

Добавлено: 27 мар 2007, 11:23
WildSery
Вообще, что это я?

Код: Выделить всё

SELECT name_last ||' '|| name_first ||' '|| name_middle Name, 
       (select COUNT(*) FROM sometable where s.id_user=id_user)
FROM spr_user s
WHERE ...

Добавлено: 27 мар 2007, 23:17
Батор
WildSery писал(а):Вообще, что это я?

Код: Выделить всё

SELECT name_last ||' '|| name_first ||' '|| name_middle Name, 
       (select COUNT(*) FROM sometable where s.id_user=id_user)
FROM spr_user s
WHERE ...
в целевом запросе несколько объединений и группировка по куче полей, а пример для простоты понимания проблемы привел

Добавлено: 28 мар 2007, 11:19
WildSery
Батор писал(а):в целевом запросе несколько объединений и группировка по куче полей, а пример для простоты понимания проблемы привел
Ага, значит, ты думаешь, что если тебе найти простое и быстрое решение для упрощённого запроса, то применив его в своём большом, получишь тот же результат?
Наивный :roll:
Ну сделай так, если не боишься NULLов.

Код: Выделить всё

SELECT name_last ||' '|| name_first ||' '|| name_middle Name
...
GROUP BY name_last, name_first, name_middle

Добавлено: 29 мар 2007, 02:02
Батор
подошло...
сам почему-то этот вариант не рассмотрел :(

Re: Вложенный запрос SELECT ... FROM (SELECT ...)

Добавлено: 12 сен 2007, 07:52
basile
вот кстати хороший вопрос а вот с таким запросом как быть?

select extract(month from doc_date), totalrub from dochead
group by ....

хотелось бы сделать группировку по месяцу а не под дате как
это возможно сделать, товарищ говорит что в файрбирде можно сделать
group by 1 и будет счастье... в ибейзе что-то я такого не пронаблюдал

Добавлено: 12 сен 2007, 12:49
WildSery
Напомни, какая у тебя версия?

Добавлено: 12 сен 2007, 14:19
basile
щаз стоит кажется 7.5.1.162
а что это что-то меняет?