我試圖編寫一個簡單的函數,這將允許我得到基於列的值的總和。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。 –