TSQL:有没有办法调用接收并返回SELECT内部表的函数

时间:2014-01-23 21:19:13

标签: sql sql-server sql-server-2008 tsql

我想创建一个函数CalculateTotal(),它接收一个值列表,百分比并返回一个计算和总百分比。

我需要为另一个SELECT的每一行调用此函数,这可能吗?

类似的东西:

SELECT CalculateTotal(SELECT value, percentage FROM TABLE2 WHERE field = other_field), other_field 
FROM Table1

我为CalculateTotal创建了一个表函数,但是我需要先创建一个用户定义的表数据类型的变量,然后将该变量传递给该函数,在这种情况下我需要使用游标为我的查询的每一行调用该函数,我想知道是否有其他方法来做,或者我肯定需要一个游标。

我有以下项目:

  • 课程表(course_idcourse_name

  • 学生表(student_idstudent_name

  • 课程中的学生笔记表(note_idnote_valuenote_percentagecourse_idstudent_id

    < / LI>
  • 表数据类型Notesnote_valuenote_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 

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;