从父记录中获取所有数据作为子记录

时间:2012-03-13 11:42:06

标签: sql sql-server-2005 tsql

我有一个如下表格,其中包含requestID和PrimaryRequestID之间的关系:

RequestID   PrimaryRequestID    Prefix  
-----------------------------------------------------------
1           NULL            MyPrefix
2           1               NULL

我想要做的是加入这个,所以我得到以下输出:

1   NULL    MyPrefix
2   1       MyPrefix

我已经尝试了几个连接,但我仍然以NULL前缀结束。

编辑:这可能和我一样接近:

SELECT  
    ra.RequestID 
    ,CASE WHEN rb.Prefix IS NULL THEN ra.Prefix ELSE ra.Prefix END AS Prefix
FROM requests ra
LEFT  JOIN requests rb on ra.RequestID = rb.PrimaryRequestID

3 个答案:

答案 0 :(得分:2)

这样的事可能会成功

测试数据

DECLARE @tbl TABLE (RequestID INT,PrimaryRequestID INT,Prefix VARCHAR(100))

INSERT INTO @tbl
VALUES
    (1,NULL,'MyPrefix'),
    (2,1,NULL)

查询

;WITH CTE(RequestID,PrimaryRequestID,Prefix)
AS
(
    SELECT
        tbl.RequestID,
        tbl.PrimaryRequestID,
        tbl.Prefix
    FROM
        @tbl AS tbl
    WHERE
        tbl.PrimaryRequestID IS NULL
    UNION ALL
    SELECT
        tbl.RequestID,
        tbl.PrimaryRequestID,
        CTE.Prefix
    FROM
        @tbl AS tbl
        JOIN CTE
            ON tbl.PrimaryRequestID=CTE.RequestID
)
SELECT
    *
FROM
    CTE

我正在使用递归cte函数阅读更多关于here

的信息

如果您的表中还有一行代码。所以你的桌子是这样的:

1   NULL    MyPrefix
2   1       NULL
3   2       NULL

然后输出仍然是这样的:

1   NULL    MyPrefix
2   1       MyPrefix
3   2       MyPrefix

因为我正在使用表中的父子关系。

如果你想有一些例子。有关stackoverflow的Herehereherehere是一些示例

答案 1 :(得分:1)

尝试:

select S.RequestId, S.PrimaryRequestID, coalesce(P.Prefix, S.Prefix) As Prefix
from myTable P
right join myTable S on P.RequestID = S.PrimaryRequestID

答案 2 :(得分:0)

select   c.requestID, 
         c.primaryRequestID, 
         isnull(c.Prefix, p.Prefix)
from     table p, 
         table c
where    c.primaryRequestID   *= p.RequestID

为古老的连接语法道歉......