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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了T-SQL谜题:将表的每一行作为内联函数的输入传递,并使用UNION ALL开发新的堆栈数据集相关的知识,希望对你有一定的参考价值。

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

1)我有(一个输入)数据集,比如X7行和一个名为YearMonth的列:

DataSet 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)

以上是关于T-SQL谜题:将表的每一行作为内联函数的输入传递,并使用UNION ALL开发新的堆栈数据集的主要内容,如果未能解决你的问题,请参考以下文章

如何使用来自 c# 的 MySQL 存储过程将表作为输入发送到存储过程?我有 T-SQL 工作

SQL 将表作为参数传递?

Oracle函数:如何将表名作为参数传递,并使用游标结果作为表名?

SQL Server - 将表传递给函数......如何?这是个好主意吗?

如何将表行传递给 plpgsql 函数?

将表传递给 postgreSQL 函数,执行 select 语句,返回表