如何展开sqltable?

How to expand a sql table?

我想创建一个视图,其中列出所有人的所有生日。假设我想 "expand" a table.

我有一个 table 具有属性 ID 和生日的人。 我有一个函数 FuncBirthdays,它需要一个 ID 和一个生日,然后它会列出当前日期之前的所有生日。例如:

SELECT * FROM FuncBirthdays(123, '01.01.2014');

Result:
123; '01.01.2014'
123; '01.01.2015'
123; '01.01.2016'
// Current date is 14.01.2016, so the list stops here.

现在我想创建一个视图,其中包含 table 人中所有人的所有生日。

SELECT * 
FROM 
 Person
INNER JOIN 
 (SELECT * FROM FuncBirthdays(Person.ID, Person.Birthday)) FB
ON Person.ID = FB.ID

MS SQL Server 2012 Studio 中的错误消息是 Person.ID 和 Person.Birthday 未绑定。

我猜测这种方式与 JOINS 的完成方式冲突。我可以使用哪些 SQL 概念来扩展 table? Person 中的每个数据集都会在输出中生成数量可变的数据集。目前我已经用手动收集数据的 C#.net 函数解决了这个问题。有没有纯粹的SQL方式?

谢谢

马丁

"The error message in the MS SQL Server 2012 Studio is that Person.ID and Person.Birthday are unbound."

是因为您试图访问无法访问的加入结果集中的人员。据我所知,在这种情况下,您需要使用交叉应用。请尝试以下查询

SELECT * FROM Person p
CROSS APPLY
(
    SELECT * FROM FuncBirthdays(p.ID, p.Birthday)   
) FB
WHERE p.ID = FB.ID
With CTE1 (ID, Birthday) AS
(
    SELECT * FROM FuncBirthdays(p.ID, p.Birthday)
)
SELECT *
FROM CTE1, Person p
WHERE p.ID = CTE1.ID