T-SQL 难题:将表的每一行作为输入传递给内联函数,并使用 UNION ALL 开发新的堆叠数据集



我在T-SQL中有一个独特而罕见的情况。这似乎是一个谜。

1)我有(一个输入)数据集,比如X,有7行,只有一列叫做YearMonth

数据集 X

YearMonth    
2018-08    
2018-09    
2018-10    
2018-11    
2018-12    
2019-01    
2019-02

从本质上讲,YearMonth代表Aug 2018Feb 2019之间的几个月。

2)我有一个名为dbo.fn_zzwwhh的内联用户定义函数(内联函数):

此内联函数返回一个包含大约 10 列和两行的表,采用诸如2018-08之类的输入。内联函数按以下方式调用:

SELECT * FROM dbo.fn_zzwwhh (@YearMonth)

本质上,这个内联函数dbo.fn_zzwwhh采用YearMonth值,比如2018-08并返回两行和十列。它总是返回两行和十列 甚至对于其他输入,如2018-092018-102018-112018-122019-012019-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)

相关内容

  • 没有找到相关文章

最新更新