Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 LEFT JOIN  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Подскажите, вот в этом случае выдает Ball = null и это правильно, но выдает 4 записи помимо одно правильной

  SELECT C1.ID AS ContractID, E.Estimate, C1.CodePostav, C1.Firm + ' '+ L.LawForm AS NAME, round(avg(cast(c.ball as FLOAT)),1) AS Ball, e.RusName, C.[Status], C.Author
	FROM _ApplicHeads A 
	INNER JOIN _EstimateHeads E ON A.EstimateID = E.Estimate
	LEFT JOIN ContractFullBall C ON E.Estimate = C.Estimate AND C.ContractID = A.Acceptor
	INNER JOIN ContractFull C1 ON A.Acceptor = C1.ID
	INNER JOIN ContractFullLawForm L ON L.LawID = C1.lawForm
	WHERE A.IsCash = 1 AND  E.Estimate = 16092000 AND A.EstType = 2
	GROUP BY C1.ID, E.Estimate, C1.CodePostav, C1.Firm + ' '+ L.LawForm, e.RusName, C.[Status], C.Author


А тут выдает правильную одну запись, но Балл считает не верно, можете подсказать как сделать что бы была и одна запись и она была из первого запроса пустая, вообщем у меня получается или одно или другой ... :(

  SELECT C1.ID AS ContractID, E.Estimate, C1.CodePostav, C1.Firm + ' '+ L.LawForm AS NAME, round(avg(cast(c.ball as FLOAT)),1) AS Ball, e.RusName, C.[Status], C.Author
	FROM _ApplicHeads A 
	INNER JOIN _EstimateHeads E ON A.EstimateID = E.Estimate
	INNER JOIN ContractFullBall C ON /* E.Estimate = C.Estimate AND */ C.ContractID = A.Acceptor
	INNER JOIN ContractFull C1 ON A.Acceptor = C1.ID
	INNER JOIN ContractFullLawForm L ON L.LawID = C1.lawForm
	WHERE A.IsCash = 1 AND  E.Estimate = 16092000 AND A.EstType = 2
	GROUP BY C1.ID, E.Estimate, C1.CodePostav, C1.Firm + ' '+ L.LawForm, e.RusName, C.[Status], C.Author
3 окт 16, 14:45    [19737638]     Ответить | Цитировать Сообщить модератору
 Re: LEFT JOIN  [new]
кролик-зануда
Guest
Pabl0,

select top 1
вам в помощь
3 окт 16, 14:54    [19737693]     Ответить | Цитировать Сообщить модератору
 Re: LEFT JOIN  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Pabl0,

нуу если я правильно понимаю E.Estimate = C.Estimate вынесите в WHERE, и может почитаете ХОТЬ ЧТО НИБУДЬ про соединения
3 окт 16, 15:00    [19737715]     Ответить | Цитировать Сообщить модератору
 Re: LEFT JOIN  [new]
Pabl0
Member

Откуда:
Сообщений: 265
кролик-зануда, top 1 ответ не верный
3 окт 16, 15:03    [19737743]     Ответить | Цитировать Сообщить модератору
 Re: LEFT JOIN  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
TaPaK
Pabl0,

нуу если я правильно понимаю E.Estimate = C.Estimate вынесите в WHERE, и может почитаете ХОТЬ ЧТО НИБУДЬ про соединения
Ничего себе! С - это правая таблица LEFT JOINа, вообще-то!
3 окт 16, 15:10    [19737780]     Ответить | Цитировать Сообщить модератору
 Re: LEFT JOIN  [new]
кролик-зануда
Guest
Pabl0,

это вы просто нужный order by не добавили

а если серьезно - ну кто по вашему коду без данных и знания "правильной" логики отбора вам расскажет, где вы накосячили?
3 окт 16, 15:14    [19737795]     Ответить | Цитировать Сообщить модератору
 Re: LEFT JOIN  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
iap
TaPaK
Pabl0,

нуу если я правильно понимаю E.Estimate = C.Estimate вынесите в WHERE, и может почитаете ХОТЬ ЧТО НИБУДЬ про соединения
Ничего себе! С - это правая таблица LEFT JOINа, вообще-то!

точно, всё равно фиг поймёшь, что ему надо :)
3 окт 16, 15:16    [19737807]     Ответить | Цитировать Сообщить модератору
 Re: LEFT JOIN  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37198
Модератор: Уважаемый Pabl0, давайте договоримся так.

Или вы выполняете п.4 и п.6 из рекомендаций, или я все ваши темы с этим запросом просто закрываю и мы расходимся.


Сообщение было отредактировано: 3 окт 16, 15:35
3 окт 16, 15:35    [19737923]     Ответить | Цитировать Сообщить модератору
 Re: LEFT JOIN  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Pabl0,

LEFT JOIN
WHERE Ball IS NULL
?
5 окт 16, 01:26    [19744365]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить