sql - 外连接在函数中发送案例列
问题描述
我在 SQL Server 中有这个查询
SELECT
t.acc_no,
t.[group],
t.maxgroup, t.amount,
t1.assigned,
taken = CASE
WHEN t1.assigned = 0 THEN NULL
ELSE t.amount
END,
[left] = CASE
WHEN t1.assigned = 0 THEN NULL
ELSE (t.maxgroup - t1.assigned)
END
FROM
Testtable t
OUTER APPLY
TestApply1(t.acc_no, t.[group], [left]) t1
我正在尝试在我的函数中发送该列,但我收到一条错误消息,提示名称无效 [left],我需要一种方法以某种方式在我的函数中发送该派生列。我该怎么做。
ALTER FUNCTION TestApply1
(@accountNo INT, @group VARCHAR(30), @left INT)
RETURNS TABLE
AS
RETURN
(SELECT
assigned = SUM(CASE
WHEN t1.amount > t1.maxgroup THEN t1.maxgroup
ELSE t1.Amount
END)
FROM
Testtable t1
WHERE
t1.acc_no = @accountNo AND t1.[group] <= @group)
GO
解决方案
如果您对 有正常定义left
,则只需使用两个级别apply
:
SELECT t.acc_no, t.[group], t.maxgroup, t.amount, t1.assigned,
taken = (CASE WHEN t1.assigned = 0 THEN NULL ELSE t.amount END),
v.[left]
FROM Testtable t CROSS APPLY
(VALUES (CASE WHEN t1.assigned = 0 THEN NULL
ELSE t.maxgroup - t1.assigned
END)
) v([left]) OUTER APPLY -- awful name for a column
TestApply1(t.acc_no, t.[group], v.[left]) t1;
但是,您的定义取决于函数的结果。因此,您想要做的事情是不明确的。你不能做你想做的事。这没有意义。
推荐阅读
- python - Altair 中的空散点图
- java - 单元格的文本不呈现并警告“元素不适合当前区域”
- javascript - 如何显示动画和删除项目后
- python - Python:将三个图像合二为一地显示前后
- python - LRANGE 的 Redis 性能问题在一个大列表中
- python-3.x - 使用 python dpath 库删除嵌套对象
- typescript - 有没有办法从重载的 TS 方法中提取所有函数签名?
- json - 我们如何将 JSON 对象转换为 JAVA 中的结果集
- javascript - 如何使用 C# 执行 HTML 文件的所有 Javascript 以仅生成 HTML DOM
- ggplot2 - 我怎样才能让线条出现在点之外?