我创建了一个助手临时表,用于存储查询结果。有时此查询会返回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