Обновить таблицу, используя выражение для случая, когда результаты равны NULL? - PullRequest
0 голосов
/ 23 октября 2019

Я создал вспомогательную временную таблицу, в которой хранятся результаты запроса. Иногда этот запрос возвращает 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

1 Ответ

0 голосов
/ 23 октября 2019

Вам нужно использовать объединение в вашем заявлении на обновление, чтобы это работало так, как вы хотите. Нечто подобное должно направить вас в правильном направлении.

UPDATE e SET 
    ColumnE = case when rh.RowNumber is null then '' else 'rpoB' end
    , ColumnF = CASE WHEN rh.RowNumber IS NULL THEN '' ELSE rh.MyDesiredValue END
FROM #ForExcel e
left join #rpoB_helper rh on rh.RowNumber = e.ExcelRow
...