T-SQL 谜题:将 table 的每一行作为内联函数的输入传递,并使用 UNION ALL 开发新的堆叠数据集
T-SQL puzzle: pass each row of a table as an input to an Inline Function and develop a new stacked dataset using 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 2018
到 Feb 2019
之间的月份。
2) 我有一个名为 dbo.fn_zzwwhh
:
的内联用户定义函数(内联函数)
这个内联函数 returns 一个 table 大约有 10 列和两行,采用 2018-08
这样的输入。内联函数的调用方式如下:
SELECT * FROM dbo.fn_zzwwhh (@YearMonth)
本质上,这个内联函数 dbo.fn_zzwwhh
接受一个 YearMonth
值,比如 2018-08
returns 两行十列。它总是 returns 两行十列
即使对于其他输入,例如 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)
我在 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
:
这个内联函数 returns 一个 table 大约有 10 列和两行,采用 2018-08
这样的输入。内联函数的调用方式如下:
SELECT * FROM dbo.fn_zzwwhh (@YearMonth)
本质上,这个内联函数 dbo.fn_zzwwhh
接受一个 YearMonth
值,比如 2018-08
returns 两行十列。它总是 returns 两行十列
即使对于其他输入,例如 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)