Je travaille sur une ancienne base de données héritée importée dans SQL Server 2012 à partir d'Oracle. J'ai le tableau suivant appelé INSOrders
qui comprend une colonne appelée OrderID
de type varchar(8)
.La division des données d'un enregistrement est une colonne spécifique T-SQL
Un exemple des données insérées est:
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
Première lettre = OrderType, à côté 2 chiffres = année - et dernier 2 chiffres = NumCommande dans cette année.
Je divisé toutes les données en trois colonnes: (non stockés, vient d'être présenté)
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
Il est à la recherche comme ceci:
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....
Mais maintenant, je veux simplement sélectionner Max Pour tout le OrderType
: montrez seulement le maximum pour la lettre A, Montrez le maximum pour la lettre B, etc. Ce que je veux dire Max, je veux dire de la lettre AI doit montrer la dernière année et le dernier numéro de commande. Donc, si j'ai A04-01 et A04-02, montrez A04-02.
J'ai besoin de modifier ma requête ont été je peux voir ce qui suit:
OrderID | OrderType | OrderYear | OrderNum
---------+-------------+-------------+----------
A04-05 | A | 04 | 05
B10-03 | B | 10 | 03
C17-01 | C | 17 | 01
Merci, je vraiment apprécier l'aide.
C'est un peu bizarre, donc je suppose dans '' B10-03' OrderYear' montre '10' au lieu de' '95' parce 10' est représenté comme' '2010' et 95' est représentée comme '1995?' – Simon
Cela ne serait-il pas aussi simple que d'utiliser MAX (orderid) et de supprimer orderid du groupe par? –