Мне нужно сделать сравнение для оценок в два момента времени и указать, было ли изменение вверх, вниз или оставалось неизменным. Например:Могу ли я установить правила для сравнения строк в SQL? (или мне нужно жестко кодировать с использованием CASE КОГДА)
Это будет таблица с четырьмя столбцами:
ID T0 T0+1 Status
1 AAA AA Lower
2 BB A Higher
3 C C Same
Однако, это не работает при применении регулярного сравнения строк, потому что в SQL
A<B
B<BBB
Мне нужно
A>B
B<BBB
- S О мой заказ (от высшего к низшему): AAA, AA, A, BBB, BB, B
- заказ SQL (от высшего к низшему): BBB, BB, B, AAA, AA, A
Теперь я есть 2 варианта в виду, но мне интересно, если кто-то знает лучше один:
1) Используйте случай, когда заявления для всех возможностей оценки вверх и вниз (у меня есть несколько значений, чем indictaed выше)
CASE WHEN T0=T0+1 then 'Same'
WHEN T0='AAA' and To+1<>'AAA' then 'Lower'
.... адрес все остальные варианты снижения рейтинга
ELSE 'Higher'
Однако это порождает очень большое число операторов CASE WHEN.
2) Мой другой вариант требует генерации 2 таблиц. В таблице 1 я использую случай, когда операторы присваивают значения/ранг рейтингам. Например:
CASE WHEN T0='AAA' then 6
CASE WHEN T0='AA' then 5
CASE WHEN T0='A' then 4
CASE WHEN T0='BBB' then 3
CASE WHEN T0='BB' then 2
CASE WHEN T0='B' then 1
The same for T0+1.
Затем в таблице 2 я использовать обычный compariosn между колонке T0 и столбца T0 + 1 на числовые значения.
Однако я ищу решение, где я могу сделать это в одном столе (с минимальными строками), и оптимально никогда не показывать столбец рейтинга. Я думаю, что вложенное утверждение будет лучшим вариантом, но теперь это работает для меня.
У кого-нибудь есть предложения?
Я использую SQL Server 2008.
Я думаю, что вариант 2 лучше, чем вариант 1. Более компактным решением будет таблица поиска со столбцами для оценки («AAA», «AA», «A» и т. Д.) И значение сортировки рейтинга. Я бы рекомендовал отдельную таблицу, если вам нужна эта логика в других запросах. –
создайте таблицу сопоставления, в которой есть текстовая строка и столбец с указанием порядка, в котором они должны быть. Присоединяйтесь к этой таблице и закажите наш столбец OrderBy. – Jeremy
Yup, lookup/mapping table - это, безусловно, путь. –