我有一个表用其他表数据更新。为此,我创建了一个触发器。在内部触发器中,我必须检查每个id
的活动次数。如果此次出现次数与变量值相同,则返回1 (true)
,否则0 (false)
。
我得到了变量
DECLARE @num_gerencias numeric(2, 0)
SELECT @num_gerencias = (SELECT COUNT(id_gerencia) FROM FR_GERENCIES)
select @num_gerencias
这样可行......返回5
然后,我计算了其他表中l_activo
变量的出现次数(变量是bit
):
SELECT id_operacio, SUM(CASE WHEN l_activo = 1 THEN 1 ELSE 0 END)
FROM FR_GERENCIES_OPERACIONS o
GROUP BY o.id_operacio
此查询也很好用,返回:
2958 5
2959 0
2960 5
2961 3
2962 5
2963 5
2964 2
2965 4
2966 5
2967 5
所有完美...现在我必须获得相同的列表,但如果sum等于@num_gerencias
,则将1和0设置为否则。
预期结果表
2958 1
2959 0
2960 1
2961 0
2962 1
2963 1
2964 0
2965 0
2966 1
2967 1
我尝试过CASE
SELECT DISTINCT id_operacio, CASE WHEN
(
SELECT SUM(CASE WHEN l_activo = 1 THEN 1 ELSE 0 END)
FROM FR_GERENCIES_OPERACIONS o
GROUP BY o.id_operacio
) = @num_gerencias THEN 1 ELSE 0 END
但是我收到了错误:
男士。 512,Level 16,State 1,Line 6 子查询返回了多个值,当它低于=时,这是不正确的! =,<,< =,>,> =或者当用作表达式时。
我也试过IF
(我猜这个选项对于这个案子来说完全错了......但我已经尝试过了)
SELECT DISTINCT id_operacio,
IF @num_gerencias = (SELECT SUM(CASE WHEN l_activo = 1 THEN 1 ELSE 0 END)
FROM FR_GERENCIES_OPERACIONS o
GROUP BY o.id_operacio)
1
ELSE 0
FROM FR_GERENCIES_OPERACIONS
但我有语法错误......
我知道如何才能达到预期结果表?
答案 0 :(得分:2)
你几乎就在那里,但你的分组和选择必须在你的案例陈述之外发生:
SELECT DISTINCT
id_operacio
,CASE
WHEN SUM(CAST(l_activo AS INTEGER)) = @num_gerencias THEN 1
ELSE 0
END
FROM FR_GERENCIES_OPERACIONS o
GROUP BY o.id_operacio