0

サンプルテーブル

---------------------------                  --------
| id | user |  num | type | ---> Want to get | name |
---------------------------                  --------
| 5  |  1   |   2  |  Q   |                  | Q2A  |
---------------------------                  --------
| 10 |  1   |   2  |  Q   |                  | Q2B  |
---------------------------                  --------
| 11 |  1   |   2  |  Q   |                  | Q2C  |
---------------------------                  --------
| 12 |  2   |   2  |  Q   |                  | Q2A  |
---------------------------                  --------
| 14 |  1   |   3  |  R   |                  | R3A  |
---------------------------                  --------
| 17 |  2   |   3  |  R   |                  | R3A  |
---------------------------                  --------

説明

左に示すような単純なデータベーススキーマがあります。SQLを使用して、値に基づいて指定された名前の列を生成する必要があります。方法はすでにわかっていますがCONCAT(type,num)、正しい文字を生成する方法がわかりません。私はずっと前に似たようなことをしたので、SQLでこのようなことが可能であることを知っています。

番号付けスキーム 各ユーザーについて、同じでさらに多くの行numtype見つかると、文字はAZから進む必要があります。26を超えることは決してないので、それに対処することは問題ではありません

最初に数値(つまり、A、B、Cの代わりに1、2、3)を生成してから、の線に沿って何かを実行できると思いSELECT 1 FROM [A..Z]ます。MySQLでこれを実現する方法がわかりません。

アップデート

If I can get from here:                   To:
---------------------------                  --------------
| id | user |  num | type |                  | name | seq |
---------------------------                  --------------
| 5  |  1   |   2  |  Q   |                  | Q2   |  1  |
---------------------------                  --------------
| 10 |  1   |   2  |  Q   |                  | Q2   |  2  |
---------------------------                  --------------
| 11 |  1   |   2  |  Q   |                  | Q2   |  3  |
---------------------------                  --------------
| 12 |  2   |   2  |  Q   |                  | Q2   |  1  |
---------------------------                  --------------
| 14 |  1   |   3  |  R   |                  | R3   |  1  |
---------------------------                  --------------
| 17 |  2   |   3  |  R   |                  | R3   |  1  |
---------------------------                  --------------
Then its just a simple matter of using CHAR()
4

1 に答える 1

3

私はあなたがこのようなものを探していると思います:

SELECT
  id, user, num, type, seq
FROM (
SELECT
  sample.*,
  @row:= case when @lst_type=type
                   and @lst_user=user
                   and @lst_num=num then @row+1 else 65 end,
  CONCAT(type, num, CHAR(@row)) seq,
  @lst_type:=type,
  @lst_user:=user,
  @lst_num:=num
FROM sample, (select @lst_type:=null,
                     @lst_user:=null,
                     @lst_num:=null, 
                     @row:=65) r
ORDER BY id
) s

ここでフィドルを参照してください。

于 2013-02-12T18:31:49.130 に答える