Author |
Topic |
kris22
Starting Member
35 Posts |
Posted - 2008-09-02 : 13:38:41
|
Hi Guys,I have a table called TBLTEMP with the following columns and i want to add a Group column for this.C1 C2 C341 te cc 51 te cc51 te cc51 te cc42 te cc41 te cc51 te cc51 te cc42 te cc41 te cc 51 te cc 51 te cc51 te cc51 te cc51 te cc51 te cc42 te cc41 te cc 51 te cc42 te cc so the final result i want is like this. If C1 = 41 then i want to increment the group column. Can you guys help me with the query? appreciate your helpThxC1 C2 C3 GRP41 te cc 051 te cc 051 te cc 051 te cc 042 te cc 041 te cc 151 te cc 151 te cc 142 te cc 141 te cc 251 te cc 251 te cc 251 te cc 2 51 te cc 2 51 te cc 251 te cc 2 42 te cc 241 te cc 351 te cc 342 te cc 3 |
|
Lamprey
Master Smack Fu Yak Hacker
4614 Posts |
Posted - 2008-09-02 : 15:10:48
|
Are there any more columns you are not showing, like a primary key or something?With the data you provided there is no reliable way to update the rows they way you want in a set based manner. |
 |
|
kris22
Starting Member
35 Posts |
Posted - 2008-09-02 : 15:34:24
|
quote: Originally posted by Lamprey Are there any more columns you are not showing, like a primary key or something?With the data you provided there is no reliable way to update the rows they way you want in a set based manner.
Hi,there is one id column before the C1 which is a identity column. so it isID C1 C2 C31 41 te cc 2 51 te cc3 51 te cc4 51 te cc5 42 te cc6 41 te cc7 51 te cc8 51 te cc9 42 te cc10 41 te cc 11 51 te cc 12 51 te cc13 51 te cc14 51 te cc15 51 te cc16 51 te cc17 42 te cc18 41 te cc 19 51 te cc20 42 te cc |
 |
|
Lamprey
Master Smack Fu Yak Hacker
4614 Posts |
Posted - 2008-09-02 : 17:19:08
|
Here is one way to do the update:DECLARE @Yak TABLE(ID INT, C1 INT, GRP INT)INSERT @YakSELECT 1, 41, NULL UNION ALL SELECT 2, 51, NULLUNION ALL SELECT 3, 51, NULLUNION ALL SELECT 4, 51, NULLUNION ALL SELECT 5, 42, NULLUNION ALL SELECT 6, 41, NULLUNION ALL SELECT 7, 51, NULLUNION ALL SELECT 8, 51, NULLUNION ALL SELECT 9, 42, NULLUNION ALL SELECT 10, 41, NULL UNION ALL SELECT 11, 51, NULL UNION ALL SELECT 12, 51, NULLUNION ALL SELECT 13, 51, NULLUNION ALL SELECT 14, 51, NULLUNION ALL SELECT 15, 51, NULLUNION ALL SELECT 16, 51, NULLUNION ALL SELECT 17, 42, NULLUNION ALL SELECT 18, 41, NULL UNION ALL SELECT 19, 51, NULLUNION ALL SELECT 20, 42, NULL UPDATE ASET GRP = (SELECT COUNT(*) FROM @Yak WHERE C1 = 41 AND ID <= A.ID) - 1FROM @Yak AS ASELECT * FROM @Yak |
 |
|
kris22
Starting Member
35 Posts |
Posted - 2008-09-02 : 17:35:35
|
quote: Originally posted by Lamprey Here is one way to do the update:DECLARE @Yak TABLE(ID INT, C1 INT, GRP INT)INSERT @YakSELECT 1, 41, NULL UNION ALL SELECT 2, 51, NULLUNION ALL SELECT 3, 51, NULLUNION ALL SELECT 4, 51, NULLUNION ALL SELECT 5, 42, NULLUNION ALL SELECT 6, 41, NULLUNION ALL SELECT 7, 51, NULLUNION ALL SELECT 8, 51, NULLUNION ALL SELECT 9, 42, NULLUNION ALL SELECT 10, 41, NULL UNION ALL SELECT 11, 51, NULL UNION ALL SELECT 12, 51, NULLUNION ALL SELECT 13, 51, NULLUNION ALL SELECT 14, 51, NULLUNION ALL SELECT 15, 51, NULLUNION ALL SELECT 16, 51, NULLUNION ALL SELECT 17, 42, NULLUNION ALL SELECT 18, 41, NULL UNION ALL SELECT 19, 51, NULLUNION ALL SELECT 20, 42, NULL UPDATE ASET GRP = (SELECT COUNT(*) FROM @Yak WHERE C1 = 41 AND ID <= A.ID) - 1FROM @Yak AS ASELECT * FROM @Yak
Hi,I just tried this query but it is updating the group column with '3' for all the rows.I already have a temptable with that data i used the query you gave me. please see the query.UPDATE tbltempSET GRP = (SELECT COUNT(*) FROM tbltemp WHERE C1 = 42 AND ID <= tbltemp.ID) - 1Is it Right? why it is updating the group column with only '3' appreciate your helpThanks |
 |
|
Lamprey
Master Smack Fu Yak Hacker
4614 Posts |
Posted - 2008-09-02 : 18:09:38
|
Try changing your query from:UPDATE tbltempSET GRP = (SELECT COUNT(*) FROM tbltemp WHERE C1 = 42 AND ID <= tbltemp.ID) - 1To:UPDATE TSET GRP = (SELECT COUNT(*) FROM tbltemp WHERE C1 = 42 AND ID <= T.ID) - 1FROM tbltemp AS TDoing it that way works in my example. |
 |
|
kris22
Starting Member
35 Posts |
Posted - 2008-09-03 : 12:14:51
|
quote: Originally posted by Lamprey Try changing your query from:UPDATE tbltempSET GRP = (SELECT COUNT(*) FROM tbltemp WHERE C1 = 42 AND ID <= tbltemp.ID) - 1To:UPDATE TSET GRP = (SELECT COUNT(*) FROM tbltemp WHERE C1 = 42 AND ID <= T.ID) - 1FROM tbltemp AS TDoing it that way works in my example.
Thank you very much for your help, it works perfect |
 |
|
|
|
|