Головоломка T-SQL: передайте каждую строку таблицы в качестве входных данных для встроенной функции и разработайте новый набор данных с использованием UNION ALL - PullRequest
0 голосов
/ 19 апреля 2019

У меня уникальная и редкая ситуация в T-SQL. Это похоже на загадку.

1) У меня есть (входной) набор данных, скажем X, с 7 строками и всего одним столбцом с именем YearMonth:

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

Этот набор данных Z необходим для моего отчета SSRS.

Может кто-нибудь сообщить мне, как передать КАЖДЫЙ ряд из набора данных X (по одному за раз) во встроенную функцию dbo.fn_zzwwhh и разработать набор данных Z, используя UNION ALL между каждым переданным входным значением?

Буду очень признателен, если вы предоставите мне решение.

1 Ответ

3 голосов
/ 19 апреля 2019

Вы пытались использовать CROSS APPLY?

SELECT *
FROM (
    SELECT YearMonth
    FROM X 
) a
CROSS APPLY dbo.fn_zzwwhh(a.YearMonth)
...