2014-09-10 131 views
-3

有獨立柱分別得到偶數和奇數列我有一個輸入:如何通過查詢

id 

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 

我想在這樣的額定輸出按列分別得到偶數和奇數列

id col 

1 2 
3 4 
5 6 
7 8 
9 10 

這裏ID和col是單獨的列id包含奇數和col包含偶數號碼指定的輸入

+1

如果無論你在支持模量工作,即將是你排序的答案。如果結果mod 2> 0那麼它是一個鍵,否則它是一個值 – 2014-09-10 19:25:33

+0

我想sql查詢 – 2014-09-10 19:26:20

+0

我們是否假設你的表從來沒有數字上的差距?如果接下來的2個數字是11,13個沒有12個呢? – SQLChao 2014-09-10 19:40:35

回答

0

要顯示奇:

Select * from MEN where (RowID % 2) = 1 

甚至顯示:

Select * from MEN where (RowID % 2) = 0 

現在,只需加入這兩個結果集即可。

Source

+0

我希望在單個查詢中 – 2014-09-10 19:30:33

+0

如何合併這些以獲得合併結果?你需要加入他們,什麼是加入條件? (這是一個反問的問題 - 答案基本上和我的答案中的GROUP BY條件相同。) – Barmar 2014-09-10 19:36:13

+0

@Barmar你是完全正確的,我在看到你之前發佈了這個答案。我可以說,經過多年的SQL經驗(不像你的很多,但仍然很多),我可能永遠不會像你這樣一個簡單的解決方案來。謝謝你教我。 – Hoh 2014-09-10 19:39:10

6
SELECT MIN(id) as id, MAX(id) as col 
FROM YourTable 
GROUP BY FLOOR((id+1)/2) 

對於IDS 12(id+1)/22/2 = 13/2 = 1.5,分別和FLOOR然後返回1用於它們兩者。同樣,對於34,這是2,依此類推。所以它根據這個公式將所有的輸入行分組成對。然後它在每個組內使用MINMAX來獲得對的較低和較高的ID。

+0

哇...只是哇 – 2014-09-10 19:29:15

+0

你是真正的MVP! – Hoh 2014-09-10 19:30:32

+2

你可以解釋什麼是你的邏輯? – 2014-09-10 19:31:35

0

如果使用SQL,你可以嘗試:

SELECT CASE WHEN column % 2 = 1 
      THEN column 
      ELSE null 
     END AS odds, 
     CASE WHEN column % 2 = 2 
      THEN column 
      ELSE null 
     END AS even 
FROM yourtable 

但不exactl你問

+0

這會將它們放在不同的列中,但不在同一行中。 – Barmar 2014-09-10 19:37:35

+0

相同的我以前試過,但我沒有得到確切的答案 – 2014-09-10 19:42:04

1

加入了對自身的表

select * 
from yourTable tA 
left join yourTable tb on tA.id = (tB.id - 1) 
where tA.id % 2 <> 0