У меня есть таблица со столбцами A, B и C, и я хочу выбрать из этой таблицы, но с некоторыми дополнительными полями, вычисленными из A, B и C и другими вычисляемыми полями. Например:
- D = A * B + C
- E = 2 * D + 4 * A
- F = D * D * E
Я думал, что смогу решить это так:
select A, B, C, (A * B + C) as D, (2 * D + 4 * A) as E, (D * D * E) as F
from Table
Но это приводит к ошибке: SQL Server не позволяет мне использовать D в выражении для E.
Я придумал два способа обойти это:
- Я расширяю использование D в E и F и использование D и E в F до их полных определений, например.
(2 * (A * B + C) + 4 * A) as E, ((A * B + C) * (A * B + C) * (2 * (A * B + C) + 4 * A)) as F
Используйте подзапросы так:
select A, B, C, D, E, (D * D * E) as F
from (
select A, B, C, D, (2 * D + 4 * A) as E
from (
select A, B, C, (A * B + C) as D
) as UpToD
) as UpToE
Ни одно из решений не является удовлетворительным: в случае 1 запрос становится неуправляемо длинным, и всякий раз, когда я изменяю способ вычисления поля, все поля, которые зависят от него, должны обновляться. Рекурсивный. В случае 2 ситуация немного лучше, но все еще неудобно создавать подзапрос для каждого нового поля, которое я хочу вычислить, и мне нужно многократно перечислять все имена полей.
Как лучше всего выразить этот запрос?
Заранее спасибо!