Я смело предполагаю, что ваши параметры содержат имена ваших полей.В противном случае я не вижу причин, по которым они у вас будут.
Если сгруппированные элементы содержат точно такие же значения внутри групп , вы можете обойтись без группировки, используямин или макс, как это:
SELECT Min(@param1), Min(@param2), Min(@param3), t.field1, sum(t.amount)
FROM table t
WHERE t.field 2 IS NOT NULL AND
t.field3ID = '12345'
У вас все равно будет проблема, что поля не могут быть выбраны таким образом .
Вы можете использовать операторы case, этоработает и может сочетаться с философией «Мин / Макс», приведенной выше, если вы хотите избавиться от группы с помощью утверждений:
SELECT
case
when @param1 = 'colname1' then colname1
when @param1 = 'colname2' then colname2
when @param1 = 'colname2' then colname3
else null
end,
case
when @param2 = 'colname1' then colname1
when @param2 = 'colname2' then colname2
when @param2 = 'colname2' then colname3
else null
end,
case
when @param3 = 'colname1' then colname1
when @param3 = 'colname2' then colname2
when @param3 = 'colname2' then colname3
else null
end,
t.field1,
sum(t.amount)
FROM table t
WHERE t.field2 IS NOT NULL AND
t.field3ID = '12345'
GROUP BY
case
when @param1 = 'colname1' then colname1
when @param1 = 'colname2' then colname2
when @param1 = 'colname2' then colname3
else null
end,
case
when @param2 = 'colname1' then colname1
when @param2 = 'colname2' then colname2
when @param2 = 'colname2' then colname3
else null
end,
case
when @param3 = 'colname1' then colname1
when @param3 = 'colname2' then colname2
when @param3 = 'colname2' then colname3
else null
end,
t.field1
Я думаю, вы можете выбрать одно из следующих решений:
- Выбрать все обязательные поля и поля фильтра на стороне клиента
- Использовать динамический SQL
- Создать несколько процедур
- Использовать операторы
Все зависит от того, как вы собираетесь его использовать.