дублирование результата в запросе левого соединения

#c# #sql

#c# #sql

Вопрос:

 select
  Users.emp as 'No',
  Users.username as Name,
  SUM(Inv_SubEMP.exchange_price) as Erad,
  coalesce(SandSD.val, 0) as s7obat, 
  ISNULL(Isnull(SUM(Inv_SubEMP.exchange_price),0) -
         IsNull(SandSD.val, 0),0) as Totol  
from
(
  (
    (Users join Inv_SubEMP on Users.username = Inv_SubEMP.emp
            and userType = 1 and IS_Deleted = 0)
    left join InvEMP on InvEMP.proc_id = Inv_SubEMP.proc_id
  )
  left join SandSD on SandSD.emp_id = Users.emp 
        and SandSD.IS_Deleted = 0
)
where InvEMP.IS_Deleted = 0
group by Users.emp, Users.username, Inv_SubEMP.emp, SandSD.val 
order by Users.emp
 

введите описание изображения здесь

Этот запрос собирает разные функции, затем объединяется с другой функцией, но я в основном хочу знать, как я мог бы переписать раздел ЛЕВОГО СОЕДИНЕНИЯ, чтобы он работал должным образом.

Я пытаюсь добавить сюда свое собственное левое соединение, чтобы … результат некоторое время работал правильно, а некоторое время нет .. иногда я оштрафовал деликатный, как № 10 на картинке, большое спасибо

Комментарии:

1. Они имеют разные s7obat значения, и вы группируете по этому. Что бы вы хотели, чтобы это изменило?

2. Если вы сгруппированы только по Users.username , вы получите одну строку для каждого имени пользователя. Но… вы группируетесь по нескольким столбцам.

3. я не могу просто сгруппировать его только по user.userName ** Столбец «Users.emp» недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY .

4. Какое значение s7obat является правильным для имени пользователя магазина: 30 или 50?

5. пожалуйста, предоставьте примеры данных

Ответ №1:

Попробуйте это:

 select
  Users.emp as 'No',
  Users.username as Name,
  SUM(Inv_SubEMP.exchange_price) as Erad,
  SUM(coalesce(SandSD.val, 0)) as s7obat, 
  ISNULL(Isnull(SUM(Inv_SubEMP.exchange_price),0) -
         IsNull(SandSD.val, 0),0) as Totol  
from
(
  (
    (Users join Inv_SubEMP on Users.username = Inv_SubEMP.emp
            and userType = 1 and IS_Deleted = 0)
    left join InvEMP on InvEMP.proc_id = Inv_SubEMP.proc_id
  )
  left join SandSD on SandSD.emp_id = Users.emp 
        and SandSD.IS_Deleted = 0
)
where InvEMP.IS_Deleted = 0
group by Users.emp, Users.username, Inv_SubEMP.emp
order by Users.emp