2010-09-14 68 views
0

表结构:需要SQL查询对于这种情况

ProjectID ParentID Name  Path 
    38   2 client  |2|38| 
    108   38 Sample1  |2|38|108 
    205   38 Sample2  |2|38|205 
    206   38 Sample3  |2|38|206 
    207   38 Sample4  |2|38|207 

查询:

SELECT Name, ProjectId 
    FROM dbo.Projects project 
WHERE ParentID = 38 

这会给我所有从上面的表中的行,除了第一行。

但是我想达到以下效果!

ProjectID ParentID Name   Path 
    108   38  clientSample1 |2|38|108 
    205   38  clientSample2 |2|38|205 
    206   38  clientSample3 |2|38|206 
    207   38  clientSample4 |2|38|207 

SQL专家请让我知道如何实现这一点的查询。我感谢你的意见。

PN:对表结构抱歉。我还无法粘贴任何图像。

+0

#1 - 你应该换你的数据库信息的代码标签,它可以更容易阅读。 #2 - 您是否想要ParentID 38的行信息,并在名称中添加了“客户端”? – LittleBobbyTables 2010-09-14 20:15:32

+0

我存储路径的问题 - 您正在培育不重复自己模式,并且介绍了项目 - >父项的继承视图与存储的“路径”不一致的可能性。 – 2010-09-14 20:40:30

+0

我会记住代码标记。谢谢!这是一个表格结构,它是一个封闭的盒子的第三方工具。我也不喜欢路径列。 – kalls 2010-09-14 20:57:09

回答

1

如果我理解正确的话,你只是想“客户”在名字前面:

SELECT P1.ProjectId, P1.ParentId, P2.[Name] + P1.[Name], P1.Path 
FROM Projects P1 
INNER JOIN Projects P2 ON P1.ParentId = P2.ProjectId 
Where P1.ParentId = 38 

实际上,您将第二次加入项目表到自己身上,以找到ou t父母的名字。从那里,你可以连接两个名字。

+0

谢谢!这一个工程! – kalls 2010-09-14 20:54:17

0

第一行有一个ParentID = 2,查询明确要求ParentID = 38

尝试:

SELECT Name, ProjectId FROM dbo.Projects project WHERE (ParentID = 38 OR ProjectId = 38)

0

尝试空两

SELECT ProjectId,parentid, 'Client'+[name],path 
FROM Project 
WHERE parentid=38 

DECLARE @String varchar(10) 
SET @string=(SELECT name FROM Project WHERE parentid=2) 
SELECT ProjectId,parentid,@string+name,path 
FROM Project WHERE parentid=38