我正在處理從Oracle導入SQL Server 2012的舊舊數據庫。我有下表INSOrders
,其中包括varchar(8)
類型的名爲OrderID
的列。從一條記錄中拆分數據是一個特定的列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
首字母=訂單類型,接下來的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
謝謝你,我會真正體會到了幫助。
這是一種奇怪的,所以我想在''B10-03'顯示OrderYear''10',而不是'95'因爲'10'表示爲'2010'和'95'表示爲'1995?' – Simon
這不就像使用MAX(orderid)和從組中刪除orderid一樣簡單嗎? –