Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.87.209.162] |
|
Данный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Добрейшего времени суток!
В результате составления запроса на очередную форму отчетности - получается не совсем красивая конструкция. Хотелось бы ее как-то оптимизировать. Приведу "синтетический" пример: SELECT CASE WHEN "Idx" = 1 THEN '1111' ELSE '*' END, CASE WHEN "Idx" = 1 THEN '2222' ELSE '*' END, CASE WHEN "Idx" = 1 THEN '3333' ELSE '*' END FROM generate_series(1,3) AS "Idx"; Результат: --------------------- case1 | case2 | case3 --------------------- 1111 | 2222 | 3333 * | * | * * | * | * --------------------- Но таких кэйзов 37 блоков, в каждом блоке 25 штук. Хотелось бы сократить в нечто подобное ниже, но это не работает. Вернее выполняется успешно, но результат не тот, что нужен: SELECT CASE WHEN "Idx" = 1 THEN ('1111','2222','3333') ELSE ('*','*','*') END FROM generate_series(1,3) AS "Idx"; Иными словами, можно ли одним кейзом генерировать несколько полей сразу? |
Сообщ.
#2
,
|
|
|
Не все так просто, как оказалось. На соседнем форуме присоветовали через регистрацию собственного составного типа делать.
Примерно будет так (PostgreSQL): CREATE TYPE foot AS (f1 text, f2 text, f3 text); SELECT (Field).* FROM ( SELECT CASE WHEN "Idx" = 1 THEN ('1111','2222','3333')::foot ELSE ('*','*','*')::foot END as Field FROM generate_series(1,3) AS "Idx" ) as Fields; Буду думать, нужно ли мне это. Или проще накопипастить кейзов |
Сообщ.
#3
,
|
|
|
А какова область значений Idx? И какую задачу нужно решить на самом деле? Может, здесь применимы JOIN-ы со вспомогательной таблицей?
|
Сообщ.
#4
,
|
|
|
Цитата AVA12 @ А какова область значений Idx? Затрудняюсь сказать, это вообще условие, в ряде случаев составное. Я лучше приведу готовый уже пример запроса, который формирует полностью нужный мне отчет. Используется определенная мною ранее функция. Запрос выполняется за 0.8сек, пока это устраивает. Прикреплённый файл06.sql (138,87 Кбайт, скачиваний: 270) Прикреплённый файлfunc.sql (14,24 Кбайт, скачиваний: 267) |