Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
jeff06
Posting Yak Master
166 Posts |
Posted - 2007-03-19 : 12:37:18
|
| I hav sql query analyser 2002,I have a table t1:mechant order typea 1 newa 2 renewala 3 renewala 4 renewala 5 renewala 6 newa 7 newa 8 renewala 9 renewala 10 renewala 11 renewal…… b 1 newb 2 newb 3 newc 1 newc 2 renewalc 3 renewalc 4 renewal… d 1 newd 2 newd 3 renewald 4 renewald 5 renewalBased on t1, I want to add a new colunm [new order] mechant order type new ordera 1 new 1a 2 renewal 2a 3 renewal 3a 4 renewal 4a 5 renewal 5a 6 new 1a 7 new 1a 8 renewal 2a 9 renewal 3a 10 renewal 4a 11 renewal 5…… b 1 new 1b 2 new 1b 3 new 1c 1 new 1c 2 renewal 2c 3 renewal 3c 4 renewal 4… d 1 new 1d 2 new 1d 3 renewal 2d 4 renewal 3d 5 renewal 4How can i acheive that?Thank you very much.Jeff |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-03-19 : 12:55:19
|
| This is how you can do BOTH sequence numbering at once!With reference to this topic http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=80817[code] color="green">-- Stage the dataDECLARE @Stage TABLE (RecID INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED, Merchant VARCHAR(1), OldOrder INT, OrderType VARCHAR(20), NewOrder INT)INSERT @Stage (Merchant, OrderType)SELECT Merchant, ContractBrFROM Table1ORDER BY Merchant, [Date]-- Initialize ORDERINGDECLARE @PrevMerchant VARCHAR(1), @PrevOrderType VARCHAR(20), @OldOrder INT, @NewOrder INTSELECT @PrevMerchant = CHAR(9), @PrevOrderType = CHAR(9)UPDATE sSET @NewOrder = NewOrder = CASE WHEN OrderType = @PrevOrderType THEN @NewOrder + 1 ELSE 1 END, @PrevOrderType = OrderType, @OldOrder = OldOrder = CASE WHEN Merchant = @PrevMerchant THEN @OldOrder + 1 ELSE 1 END, @PrevMerchant = MerchantFROM @Stage AS s-- Show the expected outputSELECT Merchant, OldOrder, OrderType, NewOrderFROM @StageORDER BY RecIDPeter LarssonHelsingborg, Sweden |
 |
|
|
X002548
Not Just a Number
15586 Posts |
|
|
jeff06
Posting Yak Master
166 Posts |
Posted - 2007-03-19 : 14:08:19
|
| Thank you very much for your help.unfortunately, I do not have update rights to the database.how to fulfill it with only select? |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-03-19 : 14:10:36
|
| You always have update right to table variables and temp tables.Did you try the code? Which error did you get?Or is this some kind of home work?Peter LarssonHelsingborg, Sweden |
 |
|
|
jeff06
Posting Yak Master
166 Posts |
Posted - 2007-03-19 : 14:36:25
|
| Thank you very much.It almost works.but the result is a little different from what I wantI want to start with 1 with every new contracts and if the new contract has subsequent renewals the sequence will be number 2,3,4....Here is the result i get:1 New 1 12 Renewal 1 13 Renewal 2 14 Renewal 3 15 Renewal 4 16 Renewal 5 17 Renewal 6 18 Renewal 7 19 Renewal 8 110 Renewal 9 111 Renewal 10 112 Renewal 11 113 Renewal 12 114 Renewal 13 115 Renewal 14 116 Renewal 15 117 Renewal 16 118 Renewal 17 119 Renewal 18 101 New 1 102 Renewal 1 103 Renewal 2 104 Renewal 3 105 Renewal 4 106 Renewal 5 1 New 1 12 Renewal 2 13 Renewal 3 14 Renewal 4 11 New 1 10 new 12 Renewal 2 103 Renewal 3 104 Renewal 4 105 Renewal 5 106 Renewal 6 |
 |
|
|
jeff06
Posting Yak Master
166 Posts |
Posted - 2007-03-19 : 14:39:58
|
| Thank you very much.It almost works.but the result is a little different from what I wantI want to start with 1 with every new contracts and if the new contract has subsequent renewals the sequence will be number 2,3,4....Here is the result i get:1 New 1 12 Renewal 1 13 Renewal 2 14 Renewal 3 15 Renewal 4 16 Renewal 5 17 Renewal 6 18 Renewal 7 19 Renewal 8 110 Renewal 9 111 Renewal 10 112 Renewal 11 113 Renewal 12 114 Renewal 13 115 Renewal 14 116 Renewal 15 117 Renewal 16 118 Renewal 17 119 Renewal 18 101 New 1 102 Renewal 1 103 Renewal 2 104 Renewal 3 105 Renewal 4 106 Renewal 5 1 New 1 12 Renewal 2 13 Renewal 3 14 Renewal 4 11 New 1 10 new 12 Renewal 2 103 Renewal 3 104 Renewal 4 105 Renewal 5 106 Renewal 6 |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-03-19 : 14:45:34
|
Look at this code-- Prepare sample dataDECLARE @Sample TABLE (Merchant VARCHAR(1), OldOrder INT, OrderType VARCHAR(20))INSERT @SampleSELECT 'a', 1, 'new' UNION ALLSELECT 'a', 3, 'renewal' UNION ALLSELECT 'a', 4, 'renewal' UNION ALLSELECT 'a', 90, 'renewal' UNION ALLSELECT 'a', 101, 'renewal' UNION ALLSELECT 'a', 102, 'new' UNION ALLSELECT 'a', 103, 'new' UNION ALLSELECT 'a', 200, 'renewal' UNION ALLSELECT 'a', 201, 'renewal' UNION ALLSELECT 'a', 300, 'renewal' UNION ALLSELECT 'a', 999, 'renewal' UNION ALLSELECT 'b', 1, 'new' UNION ALLSELECT 'b', 2, 'new' UNION ALLSELECT 'b', 4, 'new' UNION ALLSELECT 'c', 7, 'new' UNION ALLSELECT 'c', 9, 'renewal' UNION ALLSELECT 'c', 10, 'renewal' UNION ALLSELECT 'c', 11, 'renewal' UNION ALLSELECT 'd', -4, 'new' UNION ALLSELECT 'd', 5, 'new' UNION ALLSELECT 'd', 10, 'renewal' UNION ALLSELECT 'd', 100, 'renewal' UNION ALLSELECT 'd', 9999, 'renewal'SELECT * FROM @Sample-- Stage the dataDECLARE @Stage TABLE (RecID INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED, Merchant VARCHAR(1), OldOrder INT, OrderType VARCHAR(20), NewOrder INT)INSERT @Stage (Merchant, OldOrder, OrderType)SELECT Merchant, OldOrder, OrderTypeFROM @SampleORDER BY Merchant, OldOrder-- Initialize ORDERINGDECLARE @PrevMerchant VARCHAR(1), @PrevOrderType VARCHAR(20), @OldOrder INT, @NewOrder INTSELECT @PrevMerchant = CHAR(9), @PrevOrderType = CHAR(9)UPDATE sSET @NewOrder = NewOrder = CASE WHEN OrderType = @PrevOrderType THEN @NewOrder + 1 ELSE 1 END, @PrevOrderType = OrderType, @OldOrder = OldOrder = CASE WHEN Merchant = @PrevMerchant THEN @OldOrder + 1 ELSE 1 END, @PrevMerchant = MerchantFROM @Stage AS s-- Show the expected outputSELECT Merchant, OldOrder, OrderType, NewOrderFROM @StageORDER BY RecID It produces the result you want.If you still don't think so, PLEASE post some proper sample data as I have in this post.Also post the expected output based on the posted sample data.Peter LarssonHelsingborg, Sweden |
 |
|
|
jeff06
Posting Yak Master
166 Posts |
Posted - 2007-03-19 : 14:54:25
|
| Thank you very much for your help, Peter.The result from your sql code is:Merchant OldOrder OrderType NewOrdera 1 new 1a 2 renewal 1a 3 renewal 2a 4 renewal 3a 5 renewal 4a 6 new 1a 7 new 2a 8 renewal 1a 9 renewal 2a 10 renewal 3a 11 renewal 4b 1 new 1b 2 new 2b 3 new 3c 1 new 4c 2 renewal 1c 3 renewal 2c 4 renewal 3d 1 new 1d 2 new 2d 3 renewal 1d 4 renewal 2d 5 renewal 3The result i want is:Merchant OldOrder OrderType NewOrdera 1 new 1a 2 renewal 2a 3 renewal 3a 4 renewal 4a 5 renewal 5a 6 new 1a 7 new 1a 8 renewal 2a 9 renewal 3a 10 renewal 4a 11 renewal 5b 1 new 1b 2 new 1b 3 new 1c 1 new 1c 2 renewal 2c 3 renewal 3c 4 renewal 4d 1 new 1d 2 new 1d 3 renewal 2d 4 renewal 3d 5 renewal 4Is it possible to get this result?Thanks |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-03-19 : 15:00:17
|
Here! This code fixes both numbering sequences for you.You should really use this technique instead of the previous with SUBQUERY because it is very costly.-- Prepare sample dataDECLARE @Sample TABLE (Merchant VARCHAR(1), OldOrder INT, OrderType VARCHAR(20))INSERT @SampleSELECT 'a', 1, 'new' UNION ALLSELECT 'a', 3, 'renewal' UNION ALLSELECT 'a', 4, 'renewal' UNION ALLSELECT 'a', 90, 'renewal' UNION ALLSELECT 'a', 101, 'renewal' UNION ALLSELECT 'a', 102, 'new' UNION ALLSELECT 'a', 103, 'new' UNION ALLSELECT 'a', 200, 'renewal' UNION ALLSELECT 'a', 201, 'renewal' UNION ALLSELECT 'a', 300, 'renewal' UNION ALLSELECT 'a', 999, 'renewal' UNION ALLSELECT 'b', 1, 'new' UNION ALLSELECT 'b', 2, 'new' UNION ALLSELECT 'b', 4, 'new' UNION ALLSELECT 'c', 7, 'new' UNION ALLSELECT 'c', 9, 'renewal' UNION ALLSELECT 'c', 10, 'renewal' UNION ALLSELECT 'c', 11, 'renewal' UNION ALLSELECT 'd', -4, 'new' UNION ALLSELECT 'd', 5, 'new' UNION ALLSELECT 'd', 10, 'renewal' UNION ALLSELECT 'd', 100, 'renewal' UNION ALLSELECT 'd', 9999, 'renewal'SELECT * FROM @Sample-- Stage the dataDECLARE @Stage TABLE (RecID INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED, Merchant VARCHAR(1), OldOrder INT, OrderType VARCHAR(20), NewOrder INT)INSERT @Stage (Merchant, OldOrder, OrderType)SELECT Merchant, OldOrder, OrderTypeFROM @SampleORDER BY Merchant, OldOrder-- Initialize ORDERINGDECLARE @PrevMerchant VARCHAR(1), @OldOrder INT, @NewOrder INTSELECT @PrevMerchant = CHAR(9)UPDATE sSET @NewOrder = NewOrder = CASE WHEN OrderType = 'new' THEN 1 ELSE @NewOrder + 1 END, @OldOrder = OldOrder = CASE WHEN Merchant = @PrevMerchant THEN @OldOrder + 1 ELSE 1 END, @PrevMerchant = MerchantFROM @Stage AS s-- Show the expected outputSELECT Merchant, OldOrder, OrderType, NewOrderFROM @StageORDER BY RecID Peter LarssonHelsingborg, Sweden |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-03-19 : 15:01:41
|
This is the code snippet you should concentrate on.-- Stage the dataDECLARE @Stage TABLE (RecID INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED, Merchant VARCHAR(1), OldOrder INT, OrderType VARCHAR(20), NewOrder INT)INSERT @Stage (Merchant, OrderType)SELECT Merchant, ContractBrFROM Table1ORDER BY Merchant, [Date]-- Initialize ORDERINGDECLARE @PrevMerchant VARCHAR(1), @OldOrder INT, @NewOrder INTSELECT @PrevMerchant = CHAR(9)UPDATE sSET @NewOrder = NewOrder = CASE WHEN OrderType = 'new' THEN 1 ELSE @NewOrder + 1 END, @OldOrder = OldOrder = CASE WHEN Merchant = @PrevMerchant THEN @OldOrder + 1 ELSE 1 END, @PrevMerchant = MerchantFROM @Stage AS s-- Show the expected outputSELECT Merchant, OldOrder, OrderType, NewOrderFROM @StageORDER BY RecID Peter LarssonHelsingborg, Sweden |
 |
|
|
jeff06
Posting Yak Master
166 Posts |
Posted - 2007-03-19 : 15:03:31
|
| I it works perfectly.Thank you very much, Peter, It is magic. I will look into it carefully to see how it work.I apprecicate your help.Jeff |
 |
|
|
|
|
|
|
|