2015-11-24 382 views
-1

想象我有這個表:SQL查詢來連接來自每個用戶的2列和排序倒序

user | value1 | value2 
---------------------- 
John | 10 | 20 
Zoey | 30 | 40 
Sara | 50 | 60 

我應該怎麼查詢,得到如下結果? (按照DESC排序的值)

user | values 
------------- 
Sara | 60 
Sara | 50 
Zoey | 40 
Zoey | 30 
John | 20 
John | 10 

對不起ascii技能。

+1

在您提出問題時,Ir總是標記您的DBMS的好習慣。 –

+0

感謝您的反饋意見,下次會考慮到這一點 –

回答

2

你需要一個UNION ALL查詢:

SELECT user, value1 AS `values` 
FROM yourtable 
UNION ALL 
SELECT user, value2 
FROM yourtable 
ORDER BY `values` DESC 
+0

謝謝,這是真的,它會允許我接受! –

0

一種方法是union all

select x.* 
from ((select user, value1 as val 
     from t 
    ) union all 
     (select user, value2 
     from t 
    ) 
    ) x 
order by val desc; 

小心列名,如uservalues。這些是許多數據庫中的保留字。

+0

沒有測試它,但它看起來非常像@fthiella答案。先回答他/她的回答,謝謝! –

+0

@FábioMartinho。 。 。當fthiella在幾分鐘內刪除了他/她的答案時,我添加了這個答案。它似乎很好奇,因爲答案是正確的,但我不確定所有數據庫是否支持該查詢中的'order by'。 (並且大多數不支持反引號。) –

0

因爲這是隻有2個,你要查詢的字段,自工會絕對是可能的,但是,您可以看一下UNPIVOT

SELECT [user], [values] 
FROM 
    (SELECT name as [user], value1, value2 FROM TABLE_TABLE) t 
UNPIVOT 
    ([values] FOR [label] IN ([value1], [value2])) u 
    ORDER BY [values] desc 

我用這個表有結構:

name varchar(5), 
value1 int, 
value2 int