2016-05-27 11 views
0

我有兩列在我的表像FIRST_NAME SQL查詢排序順序不同,姓氏 我需要誰是有JHON的名字都在FIRST_NAME和LAST_NAME與秩序喜歡有關使用兩列

first_name last_name 
Jhon   Ashosh 
Jhon   Billa 
Jhon   Chowdary 

Asthosh  Jhon 
Bandla  Jhon 
Mehon  Jhon 
上述

這樣的數據我需要輸出 注意:首先我需要誰已經FIRST_NAME JHON與姓氏排序順序 第二first_name的排列順序與誰與一個單一的查詢有JHON在姓氏

+0

您正在使用哪種SQL引擎?您擁有MySQL,SQL Server和Oracle的標籤。這一點很重要。 –

+0

我刪除了這些標籤,讓OP重新開始並標記一個! – jarlh

+0

使用oracle sql我們可以得到 – Nag

回答

0

你可以試試這個,假設你的數據庫表名爲MY_TABLE

SELECT * FROM my_table 
WHERE first_name ='Jhon' OR last_name='Jhon' 
ORDER BY last_name, first_name 

UPDATE:

SELECT last_name, first_name 
FROM (
    SELECT 1 setNum, last_name, first_name 
    FROM Users 
    WHERE last_name = 'Jhon' 
    UNION ALL 
    SELECT 2 setNum, last_name, first_name 
    FROM Users 
    WHERE first_name = 'Jhon' 
) mergedTable 
ORDER BY setNum, (CASE WHEN 1 THEN first_name END), (CASE WHEN 2 THEN last_name END); 
+1

這不會將Jhon Smith的名字推到列表的底部嗎?也許它適用於OP,但聽起來並不像要求的那樣。 –

+0

您的查詢給輸出誰擁有如first_name和last_name是JHON但我需要像下面 LAST_NAMEFIRST_NAME您好排序順序輸出 JHON Ashosh JHON BILLA JHON Chowdary Asthosh JHON Bandla JHON Mehon JHON 沒有ü找到怎麼辦我希望當first_name是Jhon時輸出second_name將獲得排序順序,當last_name是jhon時,它將在一個查詢中得到排序first_name – Nag

+0

你在你的問題中說你需要的數據first_name是'Jhon'或者last_name是'Jhon 」。 – artsylar

0

對於你的情況,你可以這樣做:

select 
    first_name, last_name 
from 
    table_name 
where 
    first_name = 'Jhon' or last_name = 'Jhon' 
order by 
    case when first_name = 'Jhon' then last_name end 
    ,case when last_name = 'Jhon' then first_name end; 

P/S:我也有點困惑,爲什麼上述解決方案的工作等於本:

select 
    first_name, last_name 
from 
    table_name 
where 
    first_name = 'Jhon' or last_name = 'Jhon' 
order by 
    case when first_name = 'Jhon' then 0 else 1 end 
    ,case when first_name = 'Jhon' then last_name end 
    ,case when last_name = 'Jhon' then first_name end; 
+0

謝謝你幾乎可以工作 – Nag

-1

如果你想確保輸出的排序,這樣:

  1. 「約翰」的所有名字都在上面
  2. 「約翰」的所有的名字最後都在「約翰約翰」出現在底部
  3. 的可能性不大名都是

然後用泛型SQL(即沒有例如用熱膨脹係數),你可以這樣做:

SELECT first_name, last_name, 1 as name_order 
FROM my_table 
WHERE first_name = 'Jhon' 
UNION ALL 
SELECT first_name, last_name, 2 
FROM my_table 
WHERE last_name = 'Jhon' 
ORDER BY 
    name_order, 
    first_name, 
    last_name 
+0

第一個表應該是姓氏排序 –

+0

第一個表_is_按姓氏排序。整個UNION ALL集合由ORDER BY子句進行排序。 –

+0

這是一個有趣的方法,我認爲它不值得投票。 –

0

對於MySQL:

ORDER BY first_name='Jhon' DESC, last_name, first_name 

對於Oracle:

ORDER BY DECODE(first_name,'Jhon',0,1), last_name, first_name 

對於SQL Server

ORDER BY IIF(first_name='Jhon',0,1), last_name, first_name 

對於一個更便攜的ANSI標準解決方案:

ORDER BY CASE first_name WHEN 'Jhon' THEN 1 END, last_name, first_name