Расчет в выражении SQL - PullRequest
       10

Расчет в выражении SQL

0 голосов
/ 07 января 2011

У меня есть таблица, содержащая поле с именем ChannelId.Я хочу разбить его на два поля в зависимости от значения.Я попробовал это:

SELECT CustomerId, ChannelId = 1 as Chan1, ChannelId = 2 as Chan2 FROM ....

Цель состоит в том, чтобы у меня было два логических столбца, представляющих, имеет ли поле ChannelId оценочное значение.Я получаю синтаксическую ошибку.

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

Ответы [ 3 ]

1 голос
/ 07 января 2011

Попробуйте:

select
    CustomerId
  , case when ChannelId = 1 then 1 else 0 end as Channel_1
  , case when ChannelId = 2 then 1 else 0 end as Channel_2
from Customer_Channel ;
1 голос
/ 07 января 2011

Вы должны выполнять выражение, а не присваивание, и это зависит от вида SQL.Поскольку вы используете SQL Server (T-SQL):

SELECT CustomerId, (CASE WHEN ChannelId = 1 THEN 1 ELSE 0 END) as Chan1, (CASE WHEN ChannelId = 2 THEN 1 ELSE 0 END) as Chan2 FROM ....

Возможно, есть лучший способ сделать это, но я так и сделаю.

0 голосов
/ 07 января 2011

Люди уже говорили, как это сделать, используя выражение в стиле CASE ... WHEN ... THEN, но я просто хотел бы высказать мнение, что это равносильно наличию бизнес-логики в базе данных.Обычно я стремлюсь сохранить базу данных исключительно для хранения и использовать бизнес-логику на более высоком уровне моего приложения.

Я думаю, что так, потому что, если вы считаете, что приложение имеет многоуровневую архитектуру, вы поместитебизнес-логика в один слой, и один или несколько уровней глубже будет ваша база данных.Один или несколько уровней выше будет вашим пользовательским интерфейсом.«Бизнес-логика в базе данных» - это плохо, так же как было бы плохо помещать бизнес-логику в обработчик для события button_Click в форме.

Я понимаю, что это может не подходить для вашегоособые обстоятельства в этот день в 2011 году, но для будущих читателей этого вопроса, я надеюсь, он пригодится.

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