У меня есть этот динамический запрос:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@archivedate date = '5/1/2019';
WITH
E(n) AS(
SELECT n FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0))E(n)
),
E2(n) AS(
SELECT a.n FROM E a, E b
),
E4(n) AS(
SELECT a.n FROM E2 a, E2 b
),
cteTally(n) AS(
SELECT TOP((SELECT TOP (1) COUNT(DISTINCT ratechangedate) datecount
FROM MARS_DW.[dbo].[vw_GTMScheduledRateAndPaymentChangesWithAccountNumber_Archive]
WHERE ArchiveDate = @archivedate
GROUP BY account
ORDER BY datecount DESC)) ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) n
FROM E4
)
SELECT @cols = (SELECT REPLACE( '
,MIN( CASE WHEN index_num = <<index_num>> THEN ratechangedate END) AS [date <<index_num>>]
,MIN( CASE WHEN index_num = <<index_num>> THEN new_noterate END) AS [rate <<index_num>>]' , '<<index_num>>', n)
FROM cteTally
ORDER BY n
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
set @query =
N'WITH a AS (
SELECT a.account,
dense_rank() OVER ( PARTITION BY a.account ORDER BY ratechangedate) AS index_num,
CONVERT(VARCHAR(10),ratechangedate,101)[ratechangedate],
new_noterate
FROM MARS_DW.[dbo].[vw_GTMScheduledRateAndPaymentChangesWithAccountNumber_Archive] a
WHERE archivedate = @date
)
SELECT a.account' + @cols + N'
FROM a
GROUP BY a.Account;'
EXECUTE sp_executesql @query, N'@date datetime', @date = @archivedate;
Который производит этот вывод:
Я хочу удалить значения NULL
и заменить его пустой строкой. Я попытался просто вставить ISNULL(CONVERT(VARCHAR(10),ratechangedate,101),'')
и ISNULL(new_noterate,'')
в часть кода @query, но получаю следующие ошибки:
Сообщение 207, Уровень 16, Состояние 1, Строка 10
Неверное имя столбца "ratechangedate".
Сообщение 207, Уровень 16, Состояние 1, Строка 12
Недопустимое имя столбца rate rateateate.
Сообщение 207, Уровень 16, Состояние 1, Строка 14
Неверное имя столбца 'ratechangedate'.
...... и так далее для каждой другой "строки" до значения 34 .......
Любая помощь будет оценена.