我想运行一个批量更新语句,选择列的最小值和最大值。问题是有多个列具有空值。如果NULL
,我想将MinValue
设置为0
。
我有以下声明,但我收到了SELECT
和ELSE
的错误:
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)
我错过了什么?
答案 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