Я создал вспомогательную временную таблицу, в которой хранятся результаты запроса. Иногда этот запрос возвращает 1, 2 или 3 строки. Если в таблице есть данные, мне нужно использовать их для обновления другой таблицы на эти значения. Если результатов нет вообще или , есть только 1 или 2 строки, мне нужно установить значение на что-то еще.
У меня проблемы с настройкой этого запроса.
Мне нужно изменить значение NULL в #ForExcel на пустое значение (''), когда в вспомогательной таблице нет данных. В моем первом случае и # ForExcel.ExcelRow = 15, и 16 ColumnF должны быть '' (не NULL).
Во втором случае только # ForExcel.ExcelRow = 16 должно быть '' (не NULL)
Пока у меня есть
CREATE TABLE #ForExcel (ExcelRow int, ColumnE varchar(max), ColumnF varchar(max))
DECLARE @i int=1
WHILE @i <=16
BEGIN
INSERT INTO #ForExcel VALUES (@i, NULL, NULL)
SELECT @i=@i+1
END
CREATE TABLE #rpoB_helper (RowNumber int, MyDesiredValue varchar(max))
INSERT INTO #rpoB_helper VALUES (1, 'MyValue')
UPDATE #ForExcel SET ColumnE='rpoB', ColumnF=(CASE WHEN MyDesiredValue IS NULL THEN 'NA' ELSE MyDesiredValue END) FROM #rpoB_helper rh WHERE RowNumber=1 AND ExcelRow=14
UPDATE #ForExcel SET ColumnE='', ColumnF=(CASE WHEN MyDesiredValue IS NULL THEN '' ELSE MyDesiredValue END) FROM #rpoB_helper rh WHERE RowNumber=2 AND ExcelRow=15
UPDATE #ForExcel SET ColumnE='', ColumnF=(CASE WHEN MyDesiredValue IS NULL THEN '' ELSE MyDesiredValue END) FROM #rpoB_helper rh WHERE RowNumber=3 AND ExcelRow=16
SELECT * FROM #ForExcel
--now add a row to see with two rows
INSERT INTO #rpoB_helper VALUES (2, 'AnotherValue')
UPDATE #ForExcel SET ColumnE='rpoB', ColumnF=(CASE WHEN MyDesiredValue IS NULL THEN 'NA' ELSE MyDesiredValue END) FROM #rpoB_helper rh WHERE RowNumber=1 AND ExcelRow=14
UPDATE #ForExcel SET ColumnE='', ColumnF=(CASE WHEN MyDesiredValue IS NULL THEN '' ELSE MyDesiredValue END) FROM #rpoB_helper rh WHERE RowNumber=2 AND ExcelRow=15
UPDATE #ForExcel SET ColumnE='', ColumnF=(CASE WHEN MyDesiredValue IS NULL THEN '' ELSE MyDesiredValue END) FROM #rpoB_helper rh WHERE RowNumber=3 AND ExcelRow=16
SELECT * FROM #ForExcel