2017-07-03 11 views
0

カラムPRを含むテーブルDMZがあります。この列は1または2の値しか取ることができません。そして、DMZに新しい行を挿入したいのですが、PR = 2の行の量よりも大きい行の量がPR = 2の場合の行の量が2の場合、 2)(pr = 1)より大きい場合は、1を挿入してください。サブクエリの結果が別のサブクエリの結果よりも大きい場合に挿入する方法

どうすれば問題を認識できますか?

私はそのようなクエリを書いたが、私はエラーがある。

エラー:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. The statement has been terminated.

は、事前にありがとうございます。

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

あなたはちょうど私がそれらのネストされたサブクエリは非常に複雑であることがわかり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 
+0

ありがとうございます。 –

1

を使用し、そこVALUESキーワードの必要性を不要なサブクエリを持っていません。これはどう?

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列を使用したがっている可能性があります。

関連する問題