2013-01-23 106 views
0

我有以下表获得不同的结果

产品--stored的产品ID ProductRelation - 存储连接产品的ID

DECLARE @Product table(ProductID int) 

DECLARE @ProductRelation TABLE (FirstProductID int,SecondProductID int) 

INSERT INTO @Product 

SELECT 1 
UNION ALL 
SELECT 2 
UNION ALL 
SELECT 3 
UNION ALL 
SELECT 4 
UNION ALL 
SELECT 5 
UNION ALL 
SELECT 6 
UNION ALL 
SELECT 7 
UNION ALL 
SELECT 8 
UNION ALL 
SELECT 9 
UNION ALL 
SELECT 10 

--SELECT * FROM @Product 

INSERT INTO @ProductRelation 

SELECT 1,2 
UNION ALL 
SELECT 3,5 
UNION ALL 
SELECT 2,6 
UNION ALL 
SELECT 1,4 
UNION ALL 
SELECT 1,4 

--SELECT * FROM @ProductRelation 

SELECT ProductID,'Not Linked' AS 'Relation' FROM @Product 
UNION 
SELECT FirstProductID,'Linked' from @ProductRelation 
UNION 
SELECT SecondProductID ,'Linked' FROM @ProductRelation 

上面的查询结果重复的ProductID

我想选择不同ProductID ...如果产品id之间存在关系,那么它应该显示带有'Linked'的ProductID 如果没有关系,则ProductID与'未链接'

我想这样

ProductID   Relation 

1   Linked 
2   Linked 
3   Linked 
4   Linked 
5   Linked 
6   Linked 
7   Not Linked 
8   Not Linked 
9   Not Linked 
10   Not Linked 
+0

您使用的数据库是? –

+0

Sql server 2008 – SQL006

回答

1

预期的结果试试这个:

SELECT 
    P.ProductID, 
    CASE WHEN COUNT(R.FirstProductID) > 0 
     THEN 'Linked' 
     ELSE 'Not Linked' 
    END Relation 
FROM Product P 
    LEFT JOIN ProductRelation R 
     ON P.ProductID = R.FirstProductID 
     OR P.ProductID = R.SecondProductID 
GROUP BY P.ProductID 
+0

谢谢你的回答 – SQL006

0

您可以使用LEFT JOIN与案件时在SQL Server合并

SELECT DISTINCT 
    ProductID, 
    CASE WHEN @ProductRelation.FirstProductId IS NULL THEN 'Not Linked' ELSE 'Linked' END [Status] 
FROM @Product 
LEFT JOIN @ProductRelation ON @Product.ProductID = @ProductRelation.FirstProductId 
RIGHT JOIN @ProductRelation ON @Product.ProductID = @ProductRelation.SecondProductId 
1

好。 ..我喜欢这个机会使用一些unpivot技巧!

select P.ProductID 
,isnull(L.relation,'Not Linked') as relation 
from @Product P 
left outer join (select U.ProductID, cast('Linked' as varchar(max)) as relation 
       from @ProductRelation 
       unpivot (ProductID for prod in (FirstProductID,SecondProductID))U 
       group by U.ProductID 
)L 
on L.ProductID = P.ProductID 
+0

谢谢你的答案.. – SQL006

相关问题