我想创建一个函数CalculateTotal()
,它接收一个值列表,百分比并返回一个计算和总百分比。
我需要为另一个SELECT的每一行调用此函数,这可能吗?
类似的东西:
SELECT CalculateTotal(SELECT value, percentage FROM TABLE2 WHERE field = other_field), other_field
FROM Table1
我为CalculateTotal
创建了一个表函数,但是我需要先创建一个用户定义的表数据类型的变量,然后将该变量传递给该函数,在这种情况下我需要使用游标为我的查询的每一行调用该函数,我想知道是否有其他方法来做,或者我肯定需要一个游标。
我有以下项目:
课程表(course_id
,course_name
)
学生表(student_id
,student_name
)
课程中的学生笔记表(note_id
,note_value
,note_percentage
,course_id
,student_id
)
表数据类型Notes
(note_value
,note_percentage
)
表值函数CalculateTotal()
,它接收Notes
表类型并返回两个值(final_note, @percentage
)
我需要的是每个学生和课程在该课程中使用该学生的笔记给CalculateTotal
打电话,所以它会返回如下内容:
course_id | student_id | final_note (from function) | percentage (from function)
------------------------------------------------------------------------------------
1 | 1 | 3.2 | 0.8
1 | 2 | 5.0 | 1
答案 0 :(得分:3)
CROSS APPLY或OUTER APPLY怎么样?
SELECT x FROM dbo.t1
CROSS APPLY dbo.TableValuedFunction(t1.column) AS t2;
SELECT x FROM dbo.t1
OUTER APPLY dbo.TableValuedFunction(t1.column) AS t2;