2016-09-25 4 views
-3

フィールドの最初の7文字に基づいて更新する必要があります。フィールドの最初の7文字を確認してください。

例: 私はrdsと名前を付けて、 "10-1111"から始まる複数の値を付けました。複数の値がある場合、私は私が「ノー」

rds | multiorders 
10-1111-1332  |  yes 
10-1111-4322  |  yes 
10-1111-8779  |  yes 
11-3224-4444  |  no 
12-4567-3322  |  no 
16-3354-6645  |  no 
17-3344-7777  |  yes 
17-3344-1212  |  yes 

それだけでチェックするべきで、「multiorders」を更新する必要がある唯一の単一の値がある場合は「はい」と「multiorders」という名前の別のフィールドを更新する必要があります最初の7キャラクターとあなたはこのようなクエリ試すことができそうで、あるいは全く

+0

気軽に? 'mysql'または' sql server'? – Ravi

+0

sqlserverと私は何らかの理由で表形式でサンプルを追加できません – Rinu

答えて

1

multiordersを更新:

update y 
set y.multiorders='yes' 
from yourtable y where left(y.rds,7) in (select left(rds,7) as rds from yourtable group by left(rds, 7) having count(*) > 1) 
+0

申し訳ありませんが、私はかなり新しいSQL Serverに質問していますか? – Rinu

+0

私はちょうど一般的なテーブル式を使用しましたが、サブクエリでも使用できます... –

+0

あなたは私に共通のテーブル式を持たないものを表示します – Rinu

1


こんにちはRinu、あなたは、クエリの下に使用することができます

をあなたが使用するのと同じテーブル名が
  • は、カウントを選択したTABLE_NAMEの代わりに
  • あなたの条件のためにあなたのテーブルを更新するために、MERGE機能を使用することができます
    MERGE INTO table_name T1 
    USING 
        (SELECT SUBSTR(rds,1,7) AS RDS, COUNT(*) FROM table_name 
        GROUP BY RDS HAVING COUNT(*) > 1)T2 
    ON 
    T2.RDS = SUBSTR(T1.RDS,1,7) 
    WHEN MATCHED THEN 
        UPDATE 
        SET 
        multiorders='YES' 
    WHEN NOT MATCHED THEN 
        UPDATE 
        SET 
        multiorders='NO'; 
    

    Explination

    • rdsカラムのカラム数が1より大きい場合、つまり最初の7文字が重複している場合
    • 7文字はあなたが

      は何が必要あなたが得たホープは、Oracleデータベースの場合、SUBSTR関数でも、SUBSTRING関数を使用してすることができ、選択されている、すべての問題は、DBMS
  • 関連する問題