В языке SQL существует очень строгое правило , согласно которому вы должны знать количество и типы столбцов в результатах на основе только схемы, , прежде чем запрос начнет выполняться . То, что вы просите, неизвестно до тех пор, пока запрос не начнет проверять данные.
Это все еще возможно, если вы знаете значения, которые вы ожидаете в виде столбцов. В этом случае вы можете использовать условное агрегирование или иногда оператор PIVOT
... но в обоих случаях вы должны указать каждый столбец, который вам нужен с расчетом, необходимым для этого столбца вручную. Это может быстро стать громоздким для написания и поддержки, если у вас много столбцов результатов.
Это также возможно при использовании динамического SQL , при котором вы выполняете запрос в три этапа: сначала запустите запрос, чтобы получить имена столбцов, которые вам понадобятся. Во-вторых, используйте эту информацию для построения новой строки запроса с необходимыми столбцами. В-третьих, выполните новую строку запроса. Dynamic is sql опасен и медленен, и его следует использовать только тогда, когда это абсолютно необходимо.
В большинстве случаев правильным ответом здесь является вариант 3: поворот данных в клиентской программе или инструменте отчетности . Запустите запрос, который у вас уже есть, и позвольте потребителю данных беспокоиться об остальном. Причина, по которой это трудно, сводится к формальной теории реляционных множеств. То, что вы просите сделать, это не только вне традиционной теории множеств, но и в прямой противоположности тому, как наилучшим образом использовать отношения, и поэтому разработчики языка ядра СУБД неохотно создают простой синтаксис для этих операций.