如何展开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
我想创建一个视图,其中列出所有人的所有生日。假设我想 "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