将sql表的行与同一表的所有其他行联接

将sql表的行与同一表的所有其他行联接,sql,sql-server,Sql,Sql Server,我是SQL Server查询的初学者。我已分配给一个任务,在该任务中我需要自联接表 上面是表格结构。我需要的结果如下。我尝试过使用自连接、子查询等,但没有得到结果 ReqStatusId ReqStatus ChildId ChildReqStatus 1 Open 2 On Hold 1 Open 3 Closed 2 On Hold 1 Open

我是SQL Server查询的初学者。我已分配给一个任务,在该任务中我需要自联接表

上面是表格结构。我需要的结果如下。我尝试过使用自连接、子查询等,但没有得到结果

ReqStatusId ReqStatus ChildId  ChildReqStatus
1           Open      2        On Hold 
1           Open      3        Closed  
2           On Hold   1        Open       
2           On Hold   3        Closed  
3           Closed    1        Open       
3           Closed    2        On Hold  
结果应该是:一个表中的每一行都应该与所有其他行连接起来,这样就可以得到两个表之间的笛卡尔积

Select * 
From YourTable A
CROSS JOIN YourTable B
Where A.ReqStatusId <> B.ReqStatusId 

你想要得到的是通过交叉连接来实现的。如果您选择该表两次,将得到所需的结果

select a.reqstatusid, a.reqstatus, b.reqstatusid as childreqstatusid,
b.reqstatus as childreqstatus
from table a, table b
where a.reqstatusid <> b.reqstatusid
您应该在ReqStatusId ReqStatusId上执行联接:

WITH Tbl(ReqStatusId, ReqStatus) AS(
    SELECT 1, 'Open' UNION ALL
    SELECT 2, 'On Hold' UNION ALL
    SELECT 3, 'Closed'
)
SELECT
    t1.*,
    ChildId = t2.ReqStatusId,
    ChildReqStatus = t2.ReqStatus
FROM Tbl t1
INNER JOIN Tbl t2
    ON t2.ReqStatusId <> t1.ReqStatusId
select a.reqstatusid, a.reqstatus, b.reqstatusid,
b.reqstatus
from table a
inner join table b on A.ReqStatusId = B.ReqStatusId 
Where A.ReqStatusId <> B.ReqStatusId