如何通过查询获得行组合

时间:2012-03-16 22:26:21

标签: sql sql-server sql-server-2008

我有一个包含以下字段和数据的表格。

id  type value
1   1    1
2   2    1
3   2    2
4   2    3

运行查询后,我应该得到如下面的临时表中的结果

1,1
1,2
1,3

如果我在类型1中有多个值,那么它应该做同样的

所以如果数据是

 id  type value
 1   1    1
 2   1    2
 3   2    1
 4   2    2
 5   2    3

我应该得到结果

1,1
1,2
1,3
2,1
2,2
2,3

感谢您的任何帮助。

2 个答案:

答案 0 :(得分:1)

看起来像:

SELECT t1.value, t2.value
  FROM table t1
  JOIN table t2
    ON t1.type = 1
   AND t2.type = 2
;

也可以写成:

SELECT t1.value, t2.value
  FROM ( SELECT value FROM table WHERE type = 1 ) t1
 CROSS
  JOIN ( SELECT value FROM table WHERE type = 2 ) t2
;

(前者更简单,但后者更清楚地表明它在语义上是CROSS JOIN,因为连接实际上并不依赖于连接记录之间的任何关系。)

答案 1 :(得分:0)

SELECT ISNULL(CAST([type] as varchar(20)), '')
     + ','
     + ISNULL(CAST([value] as varchar(20)), '')
     AS CommaSeparated 
FROM types