| Author |
Topic |
|
rudba
Constraint Violating Yak Guru
415 Posts |
Posted - 2009-03-06 : 12:02:07
|
| I have to update FID, which check on PID, it could be multiple level.Look at the input/output.declare @tbl1 table (ID INT,PID int,FID int)INSERT INTO @tbl1SELECT 1,null,nullINSERT INTO @tbl1SELECT 2,1,nullINSERT INTO @tbl1SELECT 3,2,nullINSERT INTO @tbl1SELECT 4,null,nullINSERT INTO @tbl1SELECT 5,null,nullINSERT INTO @tbl1SELECT 6,5,nullINSERT INTO @tbl1SELECT 7,3,nullOutput Looks like this:ID FID1 12 13 14 5 56 57 1 |
|
|
vijayisonly
Master Smack Fu Yak Hacker
1836 Posts |
Posted - 2009-03-06 : 12:54:54
|
| Can you explain how you want to update the FID...the sample data doesn't tell much.how is FID 1 for ID=1 and '' for ID = 4 |
 |
|
|
rudba
Constraint Violating Yak Guru
415 Posts |
Posted - 2009-03-06 : 13:05:21
|
| PID=IDFID=PIDSo, if PID value = 1 it means PID is relation with ID' 1FID=PID=ID |
 |
|
|
rudba
Constraint Violating Yak Guru
415 Posts |
Posted - 2009-03-06 : 13:09:12
|
| declare @tbl1 table (ID INT,PID int,FID int)INSERT INTO @tbl1SELECT 1,null,nullINSERT INTO @tbl1SELECT 2,1,nullINSERT INTO @tbl1SELECT 3,2,nullINSERT INTO @tbl1SELECT 4,null,nullINSERT INTO @tbl1SELECT 5,null,nullINSERT INTO @tbl1SELECT 6,5,nullINSERT INTO @tbl1SELECT 7,3,null select * from @tbl1ID PID FID1 NULL NULL2 1 NULL3 2 NULL4 NULL NULL5 NULL NULL6 5 NULL7 3 NULLOUTPUT will be:1 NULL 12 1 13 2 14 NULL NULL5 NULL 56 5 57 3 1 |
 |
|
|
Nageswar9
Aged Yak Warrior
600 Posts |
Posted - 2009-03-07 : 00:13:02
|
| [code]declare @tbl1 table (ID INT,PID int,FID int)INSERT INTO @tbl1SELECT 1,null,nullINSERT INTO @tbl1SELECT 2,1,nullINSERT INTO @tbl1SELECT 3,2,nullINSERT INTO @tbl1SELECT 4,null,nullINSERT INTO @tbl1SELECT 5,null,nullINSERT INTO @tbl1SELECT 6,5,nullINSERT INTO @tbl1SELECT 7,3,null;with cte ( id,pid,path)as( SELECT id,pid,CONVERT(VARCHAR(MAX),id) from @tbl1 where pid is null UNION ALL SELECT t.id,t.pid,c.path+'-'+convert(varchar(max),t.id) from @tbl1 t inner join cte c on c.id = t.pid)update t set fid = t1.fidfrom @tbl1 tinner join (SELECT id,pid,path,CASE WHEN CHARINDEX('-',path) = 0 THEN Path ELSE LEFT(path,CHARINDEX('-',path)-1) END AS fidFROM cte ) t1 on t.id = t1.idselect * from @tbl1[/code] |
 |
|
|
bklr
Master Smack Fu Yak Hacker
1693 Posts |
Posted - 2009-03-07 : 00:22:27
|
try like thisdeclare @tbl1 table (ID INT,PID int,FID int)INSERT INTO @tbl1 SELECT 1,null,nullINSERT INTO @tbl1 SELECT 2,1,nullINSERT INTO @tbl1 SELECT 3,2,nullINSERT INTO @tbl1 SELECT 4,null,nullINSERT INTO @tbl1 SELECT 5,null,nullINSERT INTO @tbl1 SELECT 6,5,nullINSERT INTO @tbl1 SELECT 7,3,null ;with cte(id , pid, fid)as( select id , pid,convert(varchar(MAX),id) as fid from @tbl1 where pid is nullunion allselect t.id, t.pid, convert(varchar(MAX),c.fid) + '-'+ convert(varchar(MAX),t.id)from @tbl1 t inner join cte c on c.id = t.pid)update t set fid = c.fidfrom @tbl1 t inner join ( select id,pid,convert(int,left(fid,1)) as fid from cte ) c on c.id = t.id select * from @tbl1 |
 |
|
|
rudba
Constraint Violating Yak Guru
415 Posts |
Posted - 2009-03-09 : 12:22:12
|
| thanks guys. |
 |
|
|
Nageswar9
Aged Yak Warrior
600 Posts |
Posted - 2009-03-09 : 23:43:51
|
quote: Originally posted by rudba thanks guys.
Welcome |
 |
|
|
|
|
|