Я пытаюсь создать запрос, который будет генерировать следующую таблицу. Я знаю имена столбцов (это дата начала и окончания каждого столбца. Эти даты будут варьироваться в зависимости от месяца / года. Также количество столбцов будет варьироваться, поскольку в некоторых месяцах может быть 6 недель).

Количество бассейнов также может быть разным. Пулов может быть n. Итак, я создал запрос для каждого пула (строки) и для каждой недели (столбца).
Предположим, есть 3 пула (3 строки) и 5 ​​недель (5 столбцов), мне может потребоваться выполнить 3 * 5 = 15 запросов.
Есть ли способ создать единый запрос, чтобы исправить это?
Может ли кто-нибудь помочь мне исправить это?
Я все еще работаю над этим ..

--------------------------------------------------
row 0 | week1 | week2 | week3  | week4  | week5  |
st-end|jan1 -2|jan 3-9|jan10-17|jan18-24|jan25-31|
--------------------------------------------------
pool a| 100   | 105   | 309    | 345    | 234    |
pool b| 106   | 108   | 399    | 245    | 214    |
pool c| 120   | 145   | 359    | 365    | 274    |
--------------------------------------------------  
3
user1514499 17 Янв 2013 в 12:23
1
Это не ответ на ваш вопрос, это просто комментарий ... В большинстве случаев я предпочитаю переключаться с SQL на императивное программирование (Java). Вы можете создать подготовленный оператор, который служит для вычисления общей «ячейки», а затем выполнить его для каждой из 15 ячеек (путем изменения некоторого параметра). В этом нет ничего плохого, и все готово за 15 минут. Если вычисления и / или запросы являются дорогостоящими, вы можете кэшировать результирующую таблицу. Выполнение всего этого в SQL может стать сложным и трудным для чтения / понимания другими.
 – 
gd1
17 Янв 2013 в 12:25
2
Не видя таблиц, которые вы собираетесь запросить, чтобы создать таблицу (набор результатов), которую вы показали, невозможно сказать, каким должен быть запрос.
 – 
Nick Holt
17 Янв 2013 в 12:29
- предположим, я пытаюсь получить комбинацию ('пул a' - неделя 1), (пул a - неделя 2) и т. д., и это происходит во всех пулах, и поэтому, я думаю, необходимо выполнить 15 запросов. Я просто хочу проверить, можно ли выполнить один запрос ..
 – 
user1514499
17 Янв 2013 в 12:32
1
Это называется сводным запросом с динамическими столбцами. В настоящее время это невозможно напрямую в MySQL. См. эти чернила для некоторых интересных обходных путей.
 – 
Jim Garrison
17 Янв 2013 в 12:36
1
Если у вас есть десятки таких сводных таблиц, вы можете подумать о создании хранилища данных, поддерживающего многомерные запросы.
 – 
gd1
17 Янв 2013 в 14:23

1 ответ

Лучший ответ

Вы пробовали делать это, используя выражения CASE? [См. «Функции потока управления»] Что-то вроде этого:

select POOL
      ,sum(case when dt between 20120101 and 20120107 then VAL else 0) as Wk1
      ,sum(case when dt between 20120108 and 20120114 then VAL else 0) as Wk2
    ...  ...
from MY_TABLE
group by POOL
1
Darius X. 17 Янв 2013 в 22:27