Перекресный запрос

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Torkvemada
Сообщения: 21
Зарегистрирован: 02 авг 2006, 11:28

Сообщение Torkvemada » 09 авг 2006, 13:58

ну что ж... понятно....

Игорь Дудник
Сообщения: 7
Зарегистрирован: 27 окт 2004, 16:23

Сообщение Игорь Дудник » 09 авг 2006, 19:02

Замечу, что в отличие от Accessa, все будет работать при заранее известном количестве прайсов. ;-)))
При добавлении (убавлении) кол-ва таблиц(прайсов) прийдется переписывать запрос.
(подумав) ИМХО!

Gera
Сообщения: 53
Зарегистрирован: 12 мар 2008, 17:34

Сообщение Gera » 26 мар 2008, 11:21

По моему вместо кучи самосоединений лучше использовать CASE

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

SELECT
  Таблица.Атр
  SUM(CASE WHEN Таблица.Прайс = 1 THEN Таблица.Цена ELSE 0 END) AS Прайс1,
  SUM(CASE WHEN Таблица.Прайс = 2 THEN Таблица.Цена ELSE 0 END) AS Прайс2,
...
  SUM(CASE WHEN Таблица.Прайс = N THEN Таблица.Цена ELSE 0 END) AS ПрайсN
FROM Таблица
GROUP BY
  Таблица.Атр

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 26 мар 2008, 11:45

:shock: Gera, ты некрофил?

Кстати, "ELSE 0" можно не писать, агрегат NULL и так пропустит.

Gera
Сообщения: 53
Зарегистрирован: 12 мар 2008, 17:34

Сообщение Gera » 26 мар 2008, 12:57

Gera, ты некрофил?
Почему же? Вроде нет.

Если разворот необходимо делать по неиндексированным полу (или по вычисленному в подзапросе) с кол-вом значений 10-15, то JOIN'у, имхо, придется пробежаться те же 10-15 раз, а SUM(CASE... справится за один проход.
Выбор варианта зависит от конкретной задачи.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 26 мар 2008, 13:57

Gera писал(а):Почему же? Вроде нет.
Ты уже две темы полуторагодичной давности откопал.

Ответить