Значение переменной SQL Server по строке (MySQL: = эквивалент) - PullRequest
0 голосов
/ 13 сентября 2018

Я уже некоторое время использую MySQL, но в настоящее время я изучаю SQL Server и различия в нем.

В MySQL я использовал оператор присваивания: = как способ уменьшить объем написанного кода.Возьмите этот простой пример:

SELECT 
ps.Person_Name,
@Sales := (SELECT COUNT(*) From Sales sl Where sl.Sale_Person = ps.Person_ID) as Person_Sales,
@Target := (SELECT st.Sales_Target From Targets tg Where tg.Target_Person = ps.Person_ID) as Person_Target,
(IF(@Sales < @Target, 'You Suck', 'Well Done')) as Sales_Status
From People ps

Идея в том, что я могу сместить подзапросы, которые составляют @Sales и @Target, и использовать значения переменных в операторе IF для генерации Sales_Status для каждого сотрудника.

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

Мои вопросы:

  1. Возможно ли это вSQL Server и если да, то как?
  2. Является ли этот метод оптимальным или есть какие-либо риски?
  3. Существуют ли более эффективные или более / более безопасные способы сделать это?

У меня хорошее понимание SQL, но я ни в коем случае не эксперт.Заранее спасибо всем, кто может пролить свет и совет.

1 Ответ

0 голосов
/ 13 сентября 2018

Я бы все еще использовал подзапрос для Sales, но переместил бы его в предложение FROM и просто join для цели:

SELECT 
  ps.Person_Name,
  sal.Cnt as Person_Sales,
  tg.Sales_Target as Person_Target,
  IF(sal.Cnt < tg.Sales_Target, 'You Suck', 'Well Done') as Sales_Status
From People ps
inner join Targets tg
  on tg.Target_Person = ps.Person_ID
inner join (select Sale_Person,COUNT(*) as Cnt from Sales group by Sale_Person) sal
  on sal.Sale_Person = ps.Person_ID

Это простой, стандартный SQL, поэтому он должен быть переносимым на все РСУБД (даже на MySQL: -))

...