sql查询将所有行与同一表上的其他行匹配

时间:2013-09-18 19:50:56

标签: sql-server sql-server-2008

我有一张桌子可以容纳我的产品和服务。我希望将每个产品与我的服务相匹配,而不是根据我的产品为我的服务分配基本价格。

我的表格如下

ID  TypeID  Title
=========================
1   1   Product1
2   1   Product2
3   1   Product3
4   2   Service1
5   2   Service2
6   2   Service3 

我想让这张桌子回来。

ProductID   ServiceID   ProductTitle    ServiceTitle
=========================================================
1       4       Product1    Service1
1       5       Product1    Service2
1       6       Product1    Service3
2       4       Product2    Service1
2       5       Product2    Service2
2       6       Product2    Service3
3       4       Product3    Service1
3       5       Product3    Service2
3       6       Product3    Service3

我如何使用Ms SQL 2008?

3 个答案:

答案 0 :(得分:1)

试试这个:

SELECT
   P.ID ProductID, S.ID ServiceID, P.Title ProductTitle, S.Title ServiceTitle
FROM
(SELECT ID, Title
FROM tbl
WHERE TypeID = 1) P
CROSS JOIN
(SELECT ID, Title
FROM tbl
WHERE TypeID = 2) S
ORDER BY P.ID, S.ID

答案 1 :(得分:1)

CROSS JOIN返回两个表格的笛卡尔积。

SELECT  a.ID ProductID, 
        a.Title ProductTitle, 
        b.ID ServiceID, 
        b.Title ServiceTitle
FROM    tableName a
        CROSS JOIN tableName b
WHERE   a.TypeID = 1 AND
        b.TypeID = 2
ORDER   BY a.ID, b.ID

答案 2 :(得分:0)

以下查询可能对您有所帮助:

SELECT Product.ProductID , Product.ProductTitle , ProductType.Title
FROM dbo.Product INNER JOIN dbo.ProductType 
ON Product.ProductTypeID = ProductType.ID