在sql server

时间:2015-04-27 06:28:18

标签: sql-server

我有一张这样的表:

Id  Name
1    x
2    y
3    z

我想要一个像:

这样的组合
Name    Name
x        y
x        z
y        z

这种组合应该在同一张桌子上。 我尝试过这样的查询:

SELECT a.Name, b.Name
FROM table1 a, table1 b
WHERE a.Id != b.Id;

但这会产生结果:

Name    Name
y        x
z        x
x        y
z        y
x        z
y        z

哪一个不是确切的结果。

2 个答案:

答案 0 :(得分:3)

尝试使用<代替!=

SELECT 
    a.Name, 
    b.Name
FROM table1 a
INNER JOIN table1 b
    ON a.Id < b.Id

注意:Avoid using the old-style JOIN syntax.

答案 1 :(得分:0)

declare @t table (id int,name varchar(1))
insert into @t (id,name)values (1,'X'),(2,'Y'),(3,'Z')
;WITH Cte AS(
    SELECT *, 
        RN = ROW_NUMBER() OVER(ORDER BY name)
    FROM @t
)
SELECT 
     t1.name,
     t2.name
FROM Cte c
INNER JOIN Cte cc
    ON cc.RN > c.RN
    AND cc.name != c.name