2013-07-10 170 views
0

我有一個表有點像這樣的結構:如何執行組合具有相同值的行作爲組?

date name marks 
x  a  4 
y  a  2 
x  b  2 
y  b  7 
x  c  8 
y  c  6 
x  d  9 
y  d  6 

我想所有的行進行合併,但是,相同的name應被視爲一個在執行組合。輸出看起來像:

date name marks x.date x.name x.marks 
x  a  4  x  b  2 # a & b 
y  a  2  y  b  7 
x  a  4  x  c  8 # a & c 
y  a  2  y  c  6 
x  a  4  x  d  9 # a & d 
y  a  2  y  d  6 
x  b  2  x  d  9 # b & c 
y  b  7  y  d  6 
x  b  2  x  c  8 # b & d 
y  b  7  y  c  6 
x  c  8  x  d  9 # c & d 
y  c  6  y  d  6 

我已經厭倦了像交叉連接,分組等等各種ide,但都是徒勞。任何幫助?

回答

1
Select a.date adate, a.name aname, a.marks amark, 
x.date xdate, x.name xname, x.marks xmarks 
FROM A a, a x 
where A.name < x.Name and a.date = x.date 
order by aname, xname, adate, xdate 

這裏是一個工作演示的小提琴。 http://sqlfiddle.com/#!2/105f0/19/0

但是在將來會顯示你的工作。您嘗試過的後期查詢,以便人們可以指引您正確的方向。

這裏的訣竅是兩倍你想A.name是< x.name但只有當a.date和x.dates匹配時。所以需要交叉連接,但你不想簡單地使用<>或=

+0

可愛!我也在嘗試你的代碼http://sqlfiddle.com/#!2/b24959/1好吧,我被困在這個概率上差不多一個月了,最後你在短短的幾分鐘內就完成了!哇!謝謝你百萬:) –

+1

是啊我的訂單是不完整的那個小提琴,我糾正它,以符合您更新之一所需的輸出。訣竅是想想生成的cartesean,然後可以做些什麼來消除你不想要的行。一旦我看到輸出中沒有D名稱作爲輸出中的第一個名字,我知道我必須在where子句中使用 xQbert

+0

啊!你簡直就是天才! Stackoverflow岩石的像你一樣的編碼員的:) –

相關問題