2017-04-25 65 views
-1

我需要在SQL Server中进行查询帮助2014 我有如下表SQL服务器2014返回特定结果

ID   Part 
SP470PR 
SP470PR  181607 
SP470PR  1030 

我需要的结果显示如下:

ID   Part 
SP470PR  181607 
SP470PR  1030  
181607  SP470PR 
181607  1030  
1030  181607 
1030  SP470PR 

灿任何人帮助我这个查询? 我尝试使用Lead函数,但无法获得我想要的结果?

谢谢

+0

什么是'Part'的数据类型? –

+0

数据类型为nvarchar – user3782230

+0

您的样本数据不适合您的预期结果。您的样本结果是什么意思? –

回答

1

试试这个使用CROSS JOIN: -

Select * from table 
where part is not null 
union all 
Select distinct a.part as ID,b.ID as part from 
(select part from table) a 
cross join 
(select id from table) b 
where part is not null 
union all 
Select a.part as ID,b.part from 
(select part from table where part is not null) a 
cross join 
(select part from table where part is not null) b 
where a.part<>b.part 
+0

@ user3782230你试过这个查询吗? –

0

有数据的非常samll样品,所以我不知道我这样做是正确的,但与工会的帮助下联接我得到这个:

创建并填充示例表(保存我们这一步在你未来的问题):

DECLARE @T AS TABLE 
(
    ID nvarchar(10), 
    Part nvarchar(10) 
) 

INSERT INTO @T VALUES 
('SP470PR', NULL), 
('SP470PR', '181607'), 
('SP470PR', '1030') 

查询:

SELECT ID, Part 
FROM @T 
WHERE Part IS NOT NULL 
UNION 
SELECT Part, ID 
FROM @T 
WHERE Part IS NOT NULL 
UNION 
SELECT t1.Part, t2.Part 
FROM @T t1 
INNER JOIN @T t2 ON t1.Id = t2.Id 
WHERE t1.Part <> t2.Part 
ORDER BY ID DESC, PART DESC 

结果:

ID  Part 
SP470PR 181607 
SP470PR 1030 
181607 SP470PR 
181607 1030 
1030 SP470PR 
1030 181607 
+0

这是我的整个表格(@ India.Rocket) ,但并不总是有几个ID相同的字段... http://partsshop.mk/Test_script.rar – user3782230

+0

我不会下载它。您应该创建一个最小样本数据,以涵盖您需要的所有条件并相应地编辑您的问题。另外,请按照我在答案中所做的那样发布样本数据 - 作为DDL + DML,以便我们可以在发布前检查我们的答案。 –