Я пытаюсь написать простую функцию, которая позволит мне получить сумму, основанную на значении столбца.SQL Создание функции для получения суммы на основе имени столбца
CREATE FUNCTION [GetSumOfColumnByCase](@column varchar(50), @case int)
RETURNS INT
AS
BEGIN
declare @return int
set @return = SUM(CASE WHEN @column = @case THEN 1 ELSE 0 END)
-- Return the result of the function
return @return
END
GO
Я называю эту функцию так:
SELECT HouseDescription,
[dbo].[GetSumOfColumnByCase]([HouseTypeId], 1) AS "houseType1",
[dbo].[GetSumOfColumnByCase]([HouseTypeId], 2) AS "houseType2"
Поступать таким образом заставляет меня GROUP BY
как houseDescription и HouseTypeId столбцов, но я просто хочу, чтобы GROUP BY
в housedescription.
Если я делать вещи так:
SELECT HouseDescription,
SUM(CASE WHEN HouseTypeId = 1 THEN 1 ELSE 0 END) AS "houseType1",
SUM(CASE WHEN HouseTypeId = 2 THEN 1 ELSE 0 END) AS "houseType2"
Его штраф, он не заставит меня GROUP BY
HouseTypeId.
Может ли кто-нибудь объяснить, почему это так?
В основном вы не можете это сделать в SQL Server. Для обработки столбца переменной вам нужен динамический SQL. Функция не может легко запускать динамический SQL. –