我在T-SQL中有一个独特而罕见的情况。这似乎是一个谜。
1)我有(一个输入)数据集,比如X
,有7
行,只有一列叫做YearMonth
:
数据集 X:
YearMonth
2018-08
2018-09
2018-10
2018-11
2018-12
2019-01
2019-02
从本质上讲,YearMonth
代表Aug 2018
到Feb 2019
之间的几个月。
2)我有一个名为dbo.fn_zzwwhh
的内联用户定义函数(内联函数):
此内联函数返回一个包含大约 10 列和两行的表,采用诸如2018-08
之类的输入。内联函数按以下方式调用:
SELECT * FROM dbo.fn_zzwwhh (@YearMonth)
本质上,这个内联函数dbo.fn_zzwwhh
采用YearMonth
值,比如2018-08
并返回两行和十列。它总是返回两行和十列 甚至对于其他输入,如2018-09
、2018-10
、2018-11
、2018-12
、2019-01
、2019-02
。
现在,我的情况是这样的:
我需要开发一个新的数据集,比如数据集 Z,具有以下输出:
SELECT * FROM dbo.fn_zzwwhh ('2018-08')
UNION ALL
SELECT * FROM dbo.fn_zzwwhh ('2018-09')
UNION ALL
SELECT * FROM dbo.fn_zzwwhh ('2018-10')
UNION ALL
SELECT * FROM dbo.fn_zzwwhh ('2018-11')
UNION ALL
SELECT * FROM dbo.fn_zzwwhh ('2018-12')
UNION ALL
SELECT * FROM dbo.fn_zzwwhh ('2019-01')
UNION ALL
SELECT * FROM dbo.fn_zzwwhh ('2019-02')
我的 SSRS 报表需要此数据集Z
。
任何人都可以告诉我如何从数据集X
传递每一行(一次一行) 进入内联函数dbo.fn_zzwwhh
,并开发数据集Z
,在每次传入输入值之间使用UNION ALL
?
如果您能为我提供解决方案,我将不胜感激。
你试过用CROSS APPLY
吗?
SELECT *
FROM (
SELECT YearMonth
FROM X
) a
CROSS APPLY dbo.fn_zzwwhh(a.YearMonth)