Результаты SQL-запроса будут отображаться в порядке значений, предоставленных вручную - PullRequest
3 голосов
/ 21 июня 2011

У нас есть база данных владельцев карт лояльности. Я пытаюсь написать простой запрос SQL, который получает полное имя клиента на основе номера его карты. Однако мне нужно, чтобы вывод был в том порядке, в котором я добавляю номера карт в . Как я могу это реализовать?

Вот что я сделал.

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

Я должен добавить, что я не очень знаком с SQL, и теперь я знаю, что это в значительной степени результат поиска этой конкретной проблемы в последние несколько дней.

Ваша помощь очень ценится.

(Также я был бы признателен за способ, которым номера карт можно просто вставить в код в виде единого блока текста, но это только бонус.)

Ответы [ 3 ]

2 голосов
/ 21 июня 2011

Вы должны добавить пользовательское предложение 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
2 голосов
/ 21 июня 2011
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 голосов
/ 21 июня 2011

Есть ли у вас какой-то столбец идентификатора с автоинкрементом, используемый в качестве первичного ключа в вашей таблице "держателя карты"?Если да, а в столбце указано «id», вы можете просто использовать

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

. Это позволит отсортировать номер вашей карты в порядке их добавления в базу данных.

Ваш пример показывает, чтоВы пытаетесь сортировать номера карт постепенно, поэтому, возможно, вы ищете:

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...