1

次のテーブルがあるとします

メンバーテーブル

ID (1 letter + 5 digits) | Name | Type

そして、私は次の記録を持っています

A00000 | Peter | A 
B00001 | Amy   | B 
C00002 | Susan | A
...

ここで、次の基準に基づいてすべての ID ベースを更新する必要があります。

  1. すべての始まり00-
  2. 次に、メンバーの種類に基づいて 2 桁の数字が付属しています
  3. 次に、最初の文字を除いて元の ID を追加し直します

メンバー タイプの数字のマッピング

A -> 00 
B -> 01 
C -> 02 

更新後に持っていると思われるデータは次のとおりです

00-0000000 | Peter | A 
00-0100001 | Amy   | B 
00-0000002 | Susan | A

マッピングがドキュメント参照のみであるとします。マッピングの詳細を格納するテーブルがありません。

提案された更新ステートメントはありますか? 手伝ってくれてありがとう。

4

2 に答える 2

3

どの DBMS を指定していませんか。これは MySQL の回答です。

update MemberTable
set id = concat('00-',
                case Type
                    when 'A' then '00'
                    when 'B' then '01'
                    when 'C' then '02'
                end,
                substr(id, 2))

他のデータベースの構文は少し異なりますが、基本的な考え方は同じです。

于 2013-08-16T04:40:27.920 に答える
1

SQL Serverを使用しているとしましょう。次のようなものを試すことができます

DECLARE @Table TABLE(
        ID VARCHAR(20),
        [Type] VARCHAR(20)
)
INSERT INTO @Table VALUES ('A00000','A'),('B00001','B'),('C00002','A')

SELECT  *,
        '00-' + 
        CASE
            [Type] 
             WHEN 'A' THEN '00'
             WHEN 'B' THEN '01'
             WHEN 'C' THEN '02'
        END +
                        SUBSTRING(ID,2,LEN(ID)-1)
FROM    @Table

SQL フィドルのデモ

于 2013-08-16T04:42:01.240 に答える