我有一个包含PR列的表DMZ。此列只能取值1或2.并且我想在DMZ中插入新行,如果PR = 1的行数大于PR的行数,则PR将为2,如果数量为(=) 2)比(pr = 1)更好,然后插入1。
我怎么能意识到这个问题?
我写了这样的查询,但我有一个错误。
错误:
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。 声明已经终止。
提前谢谢。
INSERT INTO DMZ (NDM, DDM, PR) VALUES
((select MAX(NDM)+1 from DMZ), GETDATE(),
(Select
(case when
(select Count(PR) from DMZ where PR='2') >
(select Count(PR) from DMZ where PR='1') then 1
else 2 End)
from DMZ))
答案 0 :(得分:2)
您有不必要的子查询,不需要VALUES
关键字,只需使用INSERT..SELECT
INSERT INTO dmz (NDM, DDM, PR)
SELECT MAX(NDM)+1, GETDATE()
, CASE WHEN
(select Count(PR) from DMZ where PR='2') >
(select Count(PR) from DMZ where PR='1') then 1
ELSE 2 End
FROM DMZ
答案 1 :(得分:1)
我发现那些嵌套的子查询过于复杂。怎么样?
INSERT INTO DMZ (NDM, DDM, PR)
select MAX(NDM) + 1, GETDATE(),
(case when sum(case when PR = 2 then 1
when PR = 1 then -1
else 0
end) > 0
then 1 else 2
end) as PR
from DMZ;
我从PR的比较中删除了单引号。它似乎是一个数字。你不应该比较数字和字符串。保持类型一致。
此外,使用max(ndm) + 1
表示您可能真的想要使用identity
列。