当结果为NULL时,是否使用事例表达式更新表



我创建了一个助手临时表,用于存储查询结果。有时此查询会返回1、2或3行。如果表中有数据,我需要使用它将不同的表更新为这些值。如果根本没有结果只有1或2行,我需要将值设置为其他值。

我在设置此查询时遇到问题。

我需要它做的是,当助手表中没有数据时,将#ForExcel中的NULL更改为空值("(。在我的第一种情况下,#ForExcel.ExcelRow=15和16ColumnF都应该是"(而不是NULL(。

在我的第二种情况中,只有#ForExcel.ExcerRow=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

您需要在更新语句中使用联接,以便按您想要的方式工作。这样的事情应该会让你指向正确的方向。

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

最新更新