1) Если вас не интересует исключение нулей из вашего счета, вам не нужно указывать имя столбца в вашем заявлении COUNT. т.е.
select count(Column1)
даст тот же результат, как
select count(1)
Или
select count(*)
Пока column1 не имеет нулевых значений. Если столбец1 содержит нули, они не учитываются (поэтому, если есть 10 записей, из которых 3 имеют нулевые значения в столбце 1, вы получите результат 7, используя count(column1)
или количество 10, используя другие методы.
Я упоминаю это сначала, как будто вы заботитесь о нулях, а затем меняя, какой столбец используется здесь, имеет смысл; если вы этого не сделаете, перейдите с более простой логикой только count(1)
/counnt(*)
.
Все, что сказал, вот как изменить этот столбец:
select count(
case @Region
when 1 then Column1
when 2 then Column2
else Column3
end
)
2) Если вы хотите изменить столбец, используемый в вашей WHERE заявлении, есть несколько подходов:
SELECT COUNT(1)
FROM bankholidays
WHERE case @Region
when 1 then Column1
when 2 then Column2
else Column3
end BETWEEN @StartDate AND @EndDate
или
SELECT COUNT(1)
FROM bankholidays
WHERE (@Region = 1 and Column1 BETWEEN @StartDate AND @EndDate)
or (@Region = 2 and Column2 BETWEEN @StartDate AND @EndDate
or (@Region not in (1,2) and Column3 BETWEEN @StartDate AND @EndDate
Лично я предпочитаю первый стиль выше, так как он требует меньше повторов; однако второй стиль предлагает возможность использовать разные начальные & даты окончания для разных столбцов или добавить в другую логику, так что по-прежнему стоит осознавать.
Это означает, что вы хотите, чтобы выбрать столбец динамически? – Susang
Просьба предоставить данные образца и ожидаемые данные – Viki888
Столбец, на который вы рассчитываете; то есть есть нулевые значения, о которых вы беспокоитесь, или 'count (*)' или 'count (1)' (функционально идентичные) в порядке? В качестве альтернативы, это колонка в вашем заявлении WHERE, которое вас интересует? – JohnLBevan