2017-08-31 7 views
0

Je résous un problème pour le service de messagerie, ils ont des itinéraires différents et chaque route peut avoir un nombre n de parcelles. Ils organisent 2 colis dans un sac. J'ai réussi à obtenir des données comme:Mise à jour de la valeur de colonne en utilisant le groupe par une autre valeur de colonne

Route | ParcelId | GroupId | 
-------|----------|--------- 
NORTH | P1  | 1 | 
NORTH | P2  | 1 | 
NORTH | P3  | 2 | 
NORTH | P4  | 2 | 
NORTH | P5  | 3 | 
EAST | P6  | 1 | 
EAST | P7  | 1 | 
EAST | P8  | 2 | 
CENTRAL| P9  | 1 | 
CENTRAL| P10  | 1 | 
CENTRAL| P11  | 2 | 
CENTRAL| P11  | 2 | 
-------|----------|---------| 

utilisant ci-dessous: requête

select 
Route, ParcelId 
    -- calculate the group number for every 2 parcels, increment 1 
    ceiling(row_number() over(partition by route order by ParcelId)/2.0) GroupId 
from Parcel (nolock) 
where 
    ship_date = cast(getdate() as date) 

ici Parcel P1, P2 de la route du Nord et P6, P7 de la route Est ont même GroupId. Mais je veux un identifiant unique sur Parcels basé sur Route ie au lieu de seulement 1/2/3 .. si je pouvais obtenir N1, N2, N3 (pour la route du Nord) et E1, E2 (pour la route de l'Est), il sera utile pour moi tout en arrangeant des colis à l'intérieur des sacs.

Je veux donc le jeu de résultats devrait ressembler à:

Route | ParcelId | GroupId | 
-------|----------|--------- 
NORTH | P1  | N1 | 
NORTH | P2  | N1 | 
NORTH | P3  | N2 | 
NORTH | P4  | N2 | 
NORTH | P5  | N3 | 
EAST | P6  | E1 | 
EAST | P7  | E1 | 
EAST | P8  | E2 | 
CENTRAL| P9  | C1 | 
CENTRAL| P10  | C1 | 
CENTRAL| P11  | C2 | 
CENTRAL| P11  | C2 | 
-------|----------|---------| 

Si pas exactement N1/E1/C1 .. identifiant doit être unique (basé sur la route) et je dois mettre à jour un champ vide sur la table Parcel , aurait donc besoin d'un script de mise à jour pour le même.

Tout plomb sera apprécié.

Merci,

+0

Merci Sagar Gangwal pour l'édition. –

Répondre

0
select 
Route, ParcelId,CONCAT(CASE WHEN ROUTE='NORTH' THEN 'N' WHEN ROUTE='EAST' THEN 'E' WHEN ROUTE='WEST' THEN 'W' WHEN ROUTE='SOUTH' THEN 'S' WHEN ROUTE='CENTRAL' THEN 'C' END,GroupId) AS GroupId 
from Parcel 
where ship_date = cast(getdate() as date) 

Vous pouvez ci-dessus requête.

+1

Arrr! C'était tellement simple et j'ai perdu tellement de temps à écrire une histoire! Merci Sagar. Tu gères! –