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