带有Select Inside的案例的SQL Update语句

时间:2013-12-13 18:25:22

标签: sql sql-server tsql

我想运行一个批量更新语句,选择列的最小值和最大值。问题是有多个列具有空值。如果NULL,我想将MinValue设置为0

我有以下声明,但我收到了SELECTELSE的错误:

UPDATE Table1 SET MaxValue = (
        SELECT MAX(column1) FROM Table2), 
        MinValue = (CASE 
            WHEN SELECT MIN(column1) FROM Table2 <> NULL 
            THEN SELECT MIN(column1) FROM Table2 
            ELSE '0' 
        END) 

我错过了什么?

4 个答案:

答案 0 :(得分:4)

这个怎么样?

UPDATE a
SET    a.MaxValue = b.max_val,
       a.MinValue = COALESCE(b.min_val, 0)
FROM   Table1 a
       CROSS JOIN 
       (
          SELECT MAX(column1) max_val, 
                 MIN(column1) min_val 
          FROM   Table2
       ) b

答案 1 :(得分:2)

以下是您需要进行的一些明显的调整:

UPDATE Table1 SET MaxValue = (
       SELECT MAX(column1) FROM Table2),
       MinValue = (CASE
           WHEN (SELECT MIN(column1) FROM Table2) IS NOT NULL -- subquery in parentheses per John Gibb's comment and IS NOT NULL rather than <> NULL
           THEN (SELECT MIN(column1) FROM Table2) -- subquery in parentheses per John Gibb's comment
           ELSE 0 -- 0 rather than '0'
       END)

否则,您实际上与CASE合并:我会改用COALESCE

答案 2 :(得分:1)

为什么不

UPDATE Table1 SET MaxValue = (SELECT MAX(column1) FROM Table2), 
                 MinValue = COALESCE( SELECT MIN(column1) FROM Table2, '0' )
;

答案 3 :(得分:0)

table1只能容纳1行吗?你怎么需要一张桌子呢?你考虑过使用视图吗?

SELECT COALESCE(MAX(column1),0) AS MaxValue,
  COALESCE(MIN(column1),0) AS MinValue
FROM dbo.Table2

另外,为什么不合并max ...以防万一。

如果你必须使用表格......

UPDATE dbo.Table1
SET MinValue = t.[min],
  MaxValue = t.[max]
FROM (SELECT MIN(column1) [min], MAX(column1) [max] FROM dbo.Table2) t