【发布时间】:2013-11-27 19:57:29
【问题描述】:
我正在尝试创建一个存储的 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,因此我感谢您在解决主要问题时提供的任何其他有用的设计见解。感谢您的帮助!
【问题讨论】:
-
在内部选择中,为变量提供别名
@varPartionBy1 as varPartionBy1,然后在外部选择中调用新别名而不是变量。 -
我建议您创建一个问题,显示临时表中的一些示例数据,然后显示您对给定参数值的期望结果。在这里,我无法从代码中推断出它真正应该做什么。
标签: sql-server user-defined-functions column-alias