2012-03-16 68 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