我正在尝试创建一个存储的 sql server 函数,该函数将返回一个中值表,我可以将其连接回另一个表,因此:
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
)
去
这将返回错误:“消息 8155,级别 16,状态 2,过程 getmedian,第 25 行没有为 'bp' 的列 1 指定列名。” -- 表示我不明白如何在 UDF 的上下文中为列分配表别名,我猜。
我应该怎么做才能修复错误?
这是我的第一个 USF,因此我感谢您在解决主要问题时提供的任何其他有用的设计见解。谢谢你的帮助!