SQL объединение с компонентом агрегации - PullRequest
0 голосов
/ 20 октября 2008

У меня есть запрос, который я использую для составления диаграмм в службах отчетов, который выглядит примерно так:

(SELECT Alpha, Beta, Gamma, Delta, Epsilon, Zeta, Eta, Theta, Iota, Kappa, Lambda, Mu,Nu, Xi from tbl 
WHERE    
Alpha in (@Alphas) and 
Beta in (@Betas) and
Gamma in (@Gammas)  and
Delta in (@Deltas) and
Epsilon in (@Epsilons) and
Zeta in (@Zetas) and
Eta in (@Etas) and
Theta in (@Thetas) )
UNION 
(SELECT Alpha, Beta, Gamma, Delta, Epsilon, Zeta, Eta, Theta, Iota, Kappa, Lambda, Mu,Nu, Omicron from tbl 
WHERE    
Alpha in (@Alphas) and 
Beta in (@Betas) and
Gamma in (@Gammas)  and
Delta in (@Deltas) and
Epsilon in (@Epsilons) and
Zeta in (@Zetas) and
Eta in (@Etas) and
Theta in (@Thetas))

Альфа через Тета должны использоваться в нескольких вычисляемых полях, которые объединяют их (скажем, Альфа, Бета, Гамма) в строку в одном поле. Оператор select для Omicron сгенерирует то же количество строк, что и Xi, но я действительно хочу объединить Omicron, поэтому, если запрос Select с Xi создает 9 элементов легенды, агрегатный выбор для Omicron должен производить только один элемент легенды, поскольку значения Альфа через Тету не важны для Омикрона. Как должен быть структурирован запрос, чтобы я мог использовать Alpha через Theta в качестве параметров, но все же собирать Omicron?

Ответы [ 2 ]

1 голос
/ 20 октября 2008

Я не уверен, что вы действительно хотите, но если я правильно понял, вы можете попробовать что-то вроде:

(SELECT a,b,c,d FROM k
WHERE a in (@a) and b in (@b) and c in (@c))
UNION
(SELECT NULL,NULL,NULL,sum(e) FROM k
WHERE a in (@a) and b in (@b) and c in (@c) GROUP BY e)

NULL только для возможности объединения (при сохранении количества столбцов вам может потребоваться сделать псевдонимы столбцов)

0 голосов
/ 20 октября 2008

Почему бы вам просто не выбрать все греки, Си и Омикрон в одном операторе выбора и не вычислить сумму на языке хоста? Это один потенциально дорогостоящий запрос вместо двух.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...