Я собираюсь добавить несколько предложений об общих соглашениях ниже, но в качестве основной проблемы рассмотрим, что вы пытаетесь сделать с этим примером:
my_table:
id value
1 1
2 2
3 1
Теперь попробуйте показать различное value
упорядочение по идентификатору. Что это должно быть?
value
1
2
или
value
2
1
Итак, вы просите SQL Server сделать что-то, что может быть невозможным или, по крайней мере, неясным.
Теперь, что касается условных обозначений ... Возможно, кое-что из того, что вы написали здесь, но я бы сделал следующие предложения для вашего кода:
Избегайте использования зарезервированных слов и слов языка SQL для имен. Это будет включать table
, rank
и status
.
Избегайте использования специальных символов в именах. Это будет включать sp.value
. Конечно, вы можете сделать это с помощью заключенного в кавычки идентификатора, но некоторые внешние интерфейсы и т. Д. Могут не поддерживать их, даже если SQL поддерживает, и вы в большинстве случаев ничего не покупаете, используя их.
Используйте указанный в кавычках идентификатор, когда вам нужно указывать имена. Если вам абсолютно необходимо нарушить одно из двух приведенных выше предложений, используйте стандартные идентификаторы в кавычках для SQL Server: [
и ]
. Если вы хотите использовать псевдонимы в кавычках, используйте их также (и вам не нужно, как правило, заключать в кавычки псевдонимы). Это помогает избежать проблемы, на которую указывает Марк Б.
Ваше утверждение CASE
может быть лучше записано в виде одного столбца заказа. Кроме того, вы должны включить ELSE в большинстве случаев, чтобы избежать необработанных условий. Это может не понадобиться, если вы не можете иметь значения NULL или отрицательные значения ни в одном из задействованных столбцов.
CASE
WHEN sp.SalePrice > 0 THEN (sp.SalePrice*sp.QOH)
WHEN sp.SalePrice = 0 THEN (sp.Price*sp.QOH)
END
Я бы лично не использовал псевдоним таблицы (который, похоже, случайно пропущен в вашем запросе) в качестве псевдонимов столбцов. Это делает его гораздо более запутанным, поскольку выглядит так, что псевдоним столбца на самом деле является столбцом в таблице.