7

複数回繰り返される値を持つ列を取得し、その値を 1 回だけ取得して後で使用できるように保存したいのですが、同時に、その個別の列と同じ行に別の値を取得したいと考えています。

A      B       C
32263  123456  44
32263  123456  45
32263  123456  46
32264  246802  44
32263  246802  45
32264  246802  46
32265  369258  44
32265  369258  45
32265  369258  46

A、B、C は 3 つの列を表します。C は今のところ無視してください。

私の質問は次のとおりです。この情報をこのテーブルで取得し、後でスクリプトで使用できるように保存するにはどうすればよいですか?

これが私が試したものです:

use databaseName

select distinct A from tableName
order by A

結果は次のとおりです。

A
32263
32264
32265

Bの価値も与えようとしています。(AI がどの行を選択しても、与えられた A に対して B の値は同じになるため、どの行を取得するかはまったく問題ではないことに注意してください。) ここでは、C を無視します。

結果は次のようになります。

A      B
32263  123456
32264  246802
32265  369258

さて、そのようになったら、クエリから取得した値を使用して行を挿入したいと思います。これがCの出番です。私は次のようなことをしたいです:

use databaseName

insert into tableName (A, B, C)
values (32263, 123456, 47)

もちろん、そこに値を直接入れたくはありません。代わりに、見つけた3つの異なる A 値のそれぞれを循環する何らかのタイプのループを用意します。

要するに、私のテーブルは次のようになります。

A      B       C
32263  123456  44
32263  123456  45
32263  123456  46
32264  246802  44
32263  246802  45
32264  246802  46
32265  369258  44
32265  369258  45
32265  369258  46

に:

A      B       C
32263  123456  44
32263  123456  45
32263  123456  46
32263  123456  47 -
32264  246802  44
32263  246802  45
32264  246802  46
32264  246802  47 -
32265  369258  44
32265  369258  45
32265  369258  46
32265  369258  47 -

変更がわかりやすいように、新しく追加された行の横にダッシュを配置しました。

3 つの異なる A 値すべてを循環する何らかのタイプのループを実行する必要があると思いますが、私の問題はそれを行う方法ですか?

御時間ありがとうございます。

4

4 に答える 4

1

これを試して:

SELECT * INTO new_table FROM
   (SELECT DISTINCT * FROM table_name) x
于 2017-03-04T05:28:52.393 に答える
0

これは、ウィンドウ関数を使用して実行できます。

INSERT INTO TABLENAME (A, B, C)
SELECT A, B, C + 1
FROM(
select A, B, C, MAX(C) OVER(PARTITION BY A, B) AS MAXC
FROM TABLENAME 
) AS NEW_ROWS
WHERE C = MAXC
于 2013-09-25T20:07:59.963 に答える