Ich versuche, eine einfache Funktion zu schreiben, die es mir erlaubt, die Summe basierend auf dem Wert einer Spalte zu erhalten.SQL Erstellen einer Funktion zum Abrufen der Summe basierend auf dem Spaltennamen
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
Ich nenne diese Funktion wie folgt aus:
SELECT HouseDescription,
[dbo].[GetSumOfColumnByCase]([HouseTypeId], 1) AS "houseType1",
[dbo].[GetSumOfColumnByCase]([HouseTypeId], 2) AS "houseType2"
Dinge tun auf diese Weise zwingt mich zu GROUP BY
sowohl die houseDescription und die HouseTypeId Spalten, aber ich möchte nur die housedescription GROUP BY
.
Wenn ich Dinge tun, auf diese Weise:
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"
Seine feine, tut es mir GROUP BY
HouseTypeId zwingen.
Kann jemand erklären, warum das ist?
Sie können dies in SQL Server grundsätzlich nicht tun. Um mit einer Variablenspalte zu arbeiten, benötigen Sie dynamisches SQL. Eine Funktion kann dynamisches SQL nicht problemlos ausführen. –