2012-03-16 70 views
-3

获得行的组合我有一个表下面的字段和数据。如何通过查询

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 

欣赏任何帮助。

+3

不清楚!背后是什么输出 – 2012-03-16 22:29:16

+0

逻辑分析,你能猜出这个序列:15,16,17,23,25,26,27,28,29,30基于类型https://oeis.org/A090461 – Glenn 2012-03-16 22:33:38

+0

,我想repeate的结果集。所以,如果我需要1型与2型(类型的值的所有组合1(1,2)和2型的值(1,2,3),我期待得到1,1 1,2 1 ,3 2,1 2,2 2,3)。 – atif 2012-03-16 22:42:18

回答

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

+1惊人的,你解决了这个谜团...... – 2012-03-16 22:39:12

+0

感谢ruakh您的帮助。 – atif 2012-03-16 22:55:27

+0

@atif:不客气! – ruakh 2012-03-16 23:01:08

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