OracleからSQL Server 2012にインポートされた古いレガシーデータベースを使用しています。私はINSOrders
と呼ばれる以下のテーブルを持っています:OrderID
varchar(8)
の列が含まれています。1つのレコードからのデータの分割は特定の列ですT-SQL
挿入されたデータの例である:
A04-05 | B81-02 | C02-01
A01-01 | B95-01 | C99-05
A02-02 | B06-07 | C03-02
A98-06 | B10-01 | C17-01
A78-07 | B02-03 | C15-03
A79-01 | B02-01 | C78-06
最初の文字= Ordertype、次の2桁=年 - その年以内に、最後の2桁= OrderNum。
だから私は3列にすべてのデータを分割:(ちょうど提示し、保存されていない)
select
orderid,
substring(orderid, 0, patindex('%[0-9]%', orderid)) as ordtype,
right(max(datepart(yyyy, '01/01/' + substring(orderid, patindex('%[0-9]-%', orderid) - 1, 2))),2) as year,
max(substring(orderid, patindex('%-[0-9]%', orderid) + 1, 2)) as ordnum
from
ins.insorders
where
orderid is not null
group by
substring(orderid, 0, patindex('%[0-9]%', orderid)), orderid
order by
ordtype
それはこのように見ている:
OrderID | OrderType | OrderYear | OrderNum
---------+-------------+-------------+----------
A04-05 | A | 04 | 05
A01-01 | A | 01 | 01
B10-03 | B | 10 | 03
B95-01 | B | 95 | 01
etc....
しかし、今、私はちょうどマックスを選択しますOrderType
の場合:文字Aの最大値のみを表示し、文字Bの最大値を表示するなど。マックスは、文字AIから最新の年と最新の注文番号を表示する必要があります。だから私はA04 - 01とA04 - 02ちょうどA04 - 02を表示している場合。私は私のクエリを変更する必要が
は、私は以下を参照してくださいすることができました。
OrderID | OrderType | OrderYear | OrderNum
---------+-------------+-------------+----------
A04-05 | A | 04 | 05
B10-03 | B | 10 | 03
C17-01 | C | 17 | 01
私は助けを本当に感謝します、ありがとうございます。
これは一種の奇妙であるので、私は10 'のように表される95' 2010'と ''のように表される ''ためB10-03' OrderYear'が' 10 'の代わりに '95'を示す'に想定'1995?' – Simon
これは、MAX(orderid)を使用してグループからオーダーIDを削除するのと同じくらい簡単ではないでしょうか? –