2011-10-27 12 views
0

我想得到一個答案,表中有兩列和多行。對於每一行,我想以某種順序顯示兩個列,例如:如何在一個元組內排序(SQL)

初始表:

+-----------+---------+ 
| nameA  | nameB | 
+-----------+---------+ 
| Ca  | Us  | 
| Db  | Ac  | 
+-----------+---------+ 

The target table is: 

+-----------+---------+ 
| nameA  | nameB | 
+-----------+---------+ 
| Ca  | Us  | 
| Ac  | Db  | 
+-----------+---------+ 

如何解決呢?謝謝!

回答

2

你可以嘗試

SELECT 
    (CASE WHEN nameA <= nameB THEN nameA 
    ELSE nameB END) AS field1, 
    (CASE WHEN nameA < nameB THEN nameB 
    ELSE nameA END) AS field2 
FROM your_table 
0

如果我正確理解你的問題,那麼下面的更新應該換地方名B是名A.「低於」的名字

UPDATE table 
SET nameA = nameB, nameB = nameA 
WHERE nameB < nameA; 
1

馬可波羅的類似,但使用greatestleast功能:

SELECT 
    least(nameA,nameB) AS field1, 
    greatest(nameA,nameB) AS field2 
FROM your_table 
+0

好吧,比我的短,更易於閱讀。 +1爲你:) – Marco

+0

如果您使用的是專有SQL,請說明您所假定的產品。 – onedaywhen

+0

「最大」和「最小」都可以在MySQL和Oracle中使用。 –

0
SELECT nameA, nameB 
    FROM YourTable 
WHERE nameA <= nameB 
UNION 
SELECT nameB AS nameA, nameA AS nameB 
    FROM YourTable 
WHERE nameB < nameA;