2011-06-21 34 views
2

我們有一個會員卡持有人數據庫。我試圖編寫一個簡單的SQL查詢,根據他的卡號檢索客戶的全名。不過,我特別需要的輸出是,按照我在中添加卡號的確切順序。我怎樣才能實現這個?按照手動提供的值的順序顯示SQL查詢結果

這就是我所做的。

SELECT cardnumber, first_name || ' ' || last_name FROM cardholder WHERE 
cardnumber LIKE '%1111%' OR 
cardnumber LIKE '%2222%' OR 
cardnumber LIKE '%3333%' 

我要補充一點,我不是很熟悉SQL,我現在知道什麼是相當多的,在過去的幾天谷歌搜索這個特殊問題的結果。

非常感謝您的幫助。

(另外,我將是其中的卡號可以直接粘貼到代碼作爲一個單獨的文字塊的方式感激,但這只是獎金。)

+0

您是指您將卡號添加到數據庫的順序,還是您在查詢中指定它們的順序? – fearofawhackplanet

+0

我會問同樣的事情。 –

+0

對不起,如果我不清楚。我的意思是我在查詢中指定它們的順序,就像你在上面的代碼中看到它們的方式一樣。 – Andrew

回答

2
SELECT cardnumber, first_name || ' ' || last_name 
FROM (
    SELECT cardnumber, first_name, last_name, c.OrderNo 
    FROM cardholder ch, (SELECT '%1111%' cardmask, 1 OrderNo from dual 
         UNION ALL 
         SELECT '%2222%', 2 OrderNo from dual 
         UNION ALL 
         SELECT '%3333%', 3 OrderNo from dual 
         ) c 
    WHERE ch.cardnumber LIKE c.cardmask 
    Order by c.OrderNo 
) t 
+0

是否需要爲從中選擇的子查詢設置別名?並且ORDER BY應該從子查詢移出到主查詢中嗎? – MatBailie

+0

我想使用此代碼,但我得到一個表不存在的錯誤。您能否讓我知道您的代碼的哪些部分要更改以及哪些部分保持完好?我對SQL非常陌生。謝謝。 – Andrew

+0

@Andrew,檢查表卡持有者是否存在,並使用oracle。 –

0

你有一些自動遞增的ID列作爲您的「持卡人」表中的主鍵?如果是的話,和列是「ID」,你可以只使用

SELECT cardnumber, first_name || ' ' || last_name FROM cardholder ORDER BY id 

這將在他們被插入到數據庫中的順序您的信用卡號碼進行排序。

你舉的例子表明,你正在試圖您的卡號遞增排序,所以也許你要搜索的內容是

SELECT cardnumber, first_name || ' ' || last_name FROM cardholder ORDER BY cardnumber 

我希望這將有助於!

+0

嗯,我現在明白你的問題更好,這顯然不是你正在尋找的... – plang

+0

這不是,但無論如何,謝謝你。這個例子可能是誤導性的。 – Andrew

2

你將不得不添加一個自定義的ORDER BY子句。類似於

SELECT cardnumber, first_name || ' ' || last_name 
    FROM cardholder 
WHERE cardnumber LIKE '%1111%' OR 
     cardnumber LIKE '%2222%' OR 
     cardnumber LIKE '%3333%' 
ORDER BY (CASE WHEN cardnumber LIKE '%1111%' THEN 1 
       WHEN cardnumber LIKE '%2222%' THEN 2 
       WHEN cardnumber LIKE '%3333%' THEN 3 
       ELSE 4 
      END) asc 
+0

非常感謝你。這也適用於它,它看起來很乾淨,可能更適合解決我之前寫給Michael的手動輸入問題。 – Andrew