2015-08-13 4 views
2

Я начинаю запросы SQL Server. Я назначил задачу, когда мне нужно самостоятельно присоединиться к таблице.Объединение строк таблицы sql со всеми остальными строками одной таблицы

enter image description here

выше структура таблицы. И мне нужен результат, как показано ниже. Я пробовал использовать self join, sub query и т. Д. Я не мог получить результат.

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 

Результат должен прийти, как: Каждая строка таблицы должна соединена со всеми другими рядами

ответ

1

Что вы пытаетесь для достижения достигается через cross join. Если вы дважды выберете таблицу, вы получите желаемый результат.

select a.reqstatusid, a.reqstatus, b.reqstatusid as childreqstatusid, 
b.reqstatus as childreqstatus 
from table a, table b 
where a.reqstatusid <> b.reqstatusid 
3

использования CROSS JOIN, Который дает декартово произведение между двумя таблицами

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

Вы должны сделать JOIN на 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 
0
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