我試圖做一個存儲在SQL服務器功能,它將返回我可以加入回到另一個表中值的表,正是如此:列別名錯誤與SQL Server UDF
CREATE FUNCTION [dbo].getmedian (@varPartionBy1 int,@varPartionBy2 int, @varForTieBreak int, @varForMeasure int)
RETURNS TABLE
AS
RETURN
(
SELECT
@varPartionBy1,
@varPartionBy2,
AVG(@varForMeasure)
FROM
(
SELECT
@varPartionBy1,
@varPartionBy2,
ROW_NUMBER() OVER (
PARTITION BY @varPartionBy1, @varPartionBy2
ORDER BY @varForMeasure ASC, @varForTieBreak ASC) AS RowAsc,
ROW_NUMBER() OVER (
PARTITION BY @varPartionBy1, @varPartionBy2
ORDER BY @varForMeasure ASC, @varForTieBreak DESC) AS RowDesc
from
[fakename].[dbo].[temptable] bp
) bp
WHERE
RowAsc IN (RowDesc, RowDesc - 1, RowDesc + 1)
GROUP BY @varPartionBy1, @varPartionBy2
)
GO
這是返回錯誤:「消息8155,級別16,狀態2,過程getmedian,第25行 沒有列名的‘BP’第1欄指明。」 - 我想,我不明白如何在UDF上下文中爲列設置表別名。
我應該怎麼做來解決這個錯誤嗎?
這是我的第一個USF所以我很感謝你,而解決這些問題的主要問題的任何其他有用的設計見解。謝謝你的幫助!
在你的內部select中,爲變量提供一個別名,'@ varPartionBy1 as varPartionBy1',然後在外部select中調用新的別名而不是變量。 – Taryn
我建議你創建一個問題,這顯示了一些在不是Temptable樣本數據,然後顯示什麼結果,你根據給定的參數值期待。在這裏,我無法從代碼中推斷出這實際上應該做什麼。 –