-2

私のテーブルデータは

id LedgerName
1  "105 AAA"
2  "102 sss"
3  "GGGG"
4  "107 BBB"
5  "BBBB"
6  "101 TTT"

元帳を次のように並べ替えたい

6  "101 TTT"
2  "102 sss"
1  "105 AAA"
4  "107 BBB"
5  "BBBB"
3  "GGGG"

通常の注文は機能していません。分割関数を使用して、番号ベースの並べ替えを順番に分割しました。この問題を修正する方法

4

1 に答える 1

5

LedgerNameで定期的に注文したデータを使用して、必要な処理を実行します。
以下は、もう少し複雑なデータを扱うバージョンです。

SQLフィドル

MS SQL Server 2008スキーマのセットアップ

create table YourTable
(
  id int,
  LedgerName varchar(20)
)

insert into YourTable values
(1,  '105 AAA'  ),
(2,  '1020 sss' ),
(3,  ' '        ),
(4,  null       ),
(5,  '0'        ),
(6,  '999 sss'  ),
(7,  '9999 sss' ),
(8,  'GGGG'     ),
(9,  '107 BBB'  ),
(10, 'BBBB'     ),
(11, '101 TTT'  )

クエリ1

select id,
       LedgerName
from YourTable
order by case when patindex('%[^0-9]%', isnull(LedgerName, '')+' ') = 1 then 1 else 0 end,
         cast(left(LedgerName, patindex('%[^0-9]%', LedgerName+' ')-1) as int),
         LedgerName

結果

| ID | LEDGERNAME |
-------------------
|  5 |          0 |
| 11 |    101 TTT |
|  1 |    105 AAA |
|  9 |    107 BBB |
|  6 |    999 sss |
|  2 |   1020 sss |
|  7 |   9999 sss |
|  4 |     (null) |
|  3 |            |
| 10 |       BBBB |
|  8 |       GGGG |
于 2012-11-23T07:02:45.110 に答える