это моя первая попытка динамического поворота в SQL, и я стал немного застрял!Динамический SQL Pivot - удаление нулей
У меня есть две таблицы, к которым я присоединяюсь, один держит биржевые позиции, а другой имеет разные цены на акции для разных сайтов (источников). Поскольку существует вероятность наличия разных сайтов, запрос должен быть динамическим.
Проблема в том, что я не могу удалить нули из результатов, и я надеялся, что кто-то сможет помочь.
Результаты выглядят следующим образом в настоящее время:
ID site-site1 site-site2 site-site3
1 null 1.99 2.99
2 12.99 null 10.00
3 1.50 null 2.00
Запрос выглядит следующим образом:
DECLARE @sources nvarchar(max)
SELECT @sources =
STUFF((SELECT DISTINCT ',[' +
CASE
WHEN ip.[Source] is null or ip.[Source] = '' THEN 'Default'
ELSE ip.[Source]
END
+ ' - ' +
CASE
WHEN ip.secondSource is null or ip.secondSource = '' THEN 'Default'
ELSE ip.secondSource
END
+ ']'
FROM itemprice ip
for XML PATH('')
), 1, 1, '')
DECLARE @SQL nvarchar(MAX)
SELECT @SQL = N'
SELECT *
FROM
(
SELECT
s.id,
[Source] = CASE
WHEN ip.[Source] is null or ip.[Source] = '''' THEN ''Default''
ELSE ip.[Source]
END + '' - '' +
CASE WHEN ip.secondSource is null or ip.secondSource = '''' THEN ''Default''
ELSE ip.secondSource
END,
SalePrice = isnull(ip.SalePrice, 0)
FROM stock s
LEFT OUTER JOIN itemprice ip on ip.id = s.id
) data
PIVOT
(
MAX(SalePrice) for [Source] IN (' + @sources + ')
) as PivotTable
ORDER BY PivotTable.id'
exec sp_executesql @sql
Любая помощь будет высоко оценена, кажется, как будто это не так просто, как упаковка каждого @ источник в ISNULL.
Благодаря
Что вы имеете в виду, удалив нули? Что вы хотите занять их место? – podiluska
Извините, должно быть, было более понятно, в этом случае мне понадобилось 0s –