2011-06-21 7 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

関連する問題