T-SQL查询问题

时间:2010-12-31 21:24:46

标签: sql sql-server sql-server-2005 tsql

我有一个名为Summary的表,表中的数据如下所示:

ID     Type    Name         Parent

1      Act     Rent          Null
2      Eng     E21-01-Rent   Rent
3      Prj     P01-12-Rent   E21-01-Rent
1      Act     Fin           Null
2      Eng     E13-27-Fin    Fin
3      Prj     P56-35-Fin    E13-27-Fin

我正在编写一个必须根据类型提取父级的SP。这里总是类型Act有ID 1,Eng有ID 2,Prj有ID 3。

ACT父类型总是NUll, 类型Eng父母是行动和 类型Prj parent是Eng

现在我有一个名为Detail的表。我正在编写一个SP来将详细信息表数据插入到Summary表中。

我将id作为参数传递:

我遇到了父母的问题。我怎么做到的?

我总是可以说当ID为1时父级为Null但是当ID为2时,父级是ID 1的名称,类似于ID为3,则父级是ID2的名称。

我如何得到它?

任何人都可以帮助我:

2 个答案:

答案 0 :(得分:1)

我建议重新访问您的数据模型,但这可能会有所帮助......

/* @Parent is VarChar(255) because definition is unknown.
   We use Top(1) because in example ID is not unique.
   We assume the ID being passed in is declared as @ID.*/
Declare @ParentID Int
Set @ParentID=(@ID-1)
Declare @Parent VarChar(255)
Set @Parent = (Select Top(1) Name From Summary
               Where ID=@ParentID) 

只需将@Parent插入Parent列即可。

答案 1 :(得分:1)

我认为你必须有一个主键(另一个ID是唯一的),因为使用这个模型你将始终拥有该类型的第一行,例如prj将始终拥有父“E21-01-Rent”并且没办法达到“E13-27-Fin”。

最后尝试此查询

Select id,name,(Select Top 1 [Name] From [Summary]
               Where ID=@ID -1) as parent2
 from [Summary]
where id = @ID