需要SQL查询此方案

时间:2010-09-14 20:05:40

标签: 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:对表结构感到抱歉。我还无法粘贴任何图片。

3 个答案:

答案 0 :(得分: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

实际上,您将第二次将Projects表添加到自身,以查找父级的名称。从那里,您可以将两个名称连接在一起。

答案 1 :(得分:0)

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

尝试:

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

答案 2 :(得分: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