2012-03-28 4 views
0

Я использовал тот же запрос для получения данных из двух таблиц. когда я не использую часть c.IsReceived = 0, она возвращает Даты, но она не возвращает ничего, когда она используется. Есть строки в RepDailyCollection с IsReceived = 0 для RepID = 205. Как вы думаете, что я делаю неправильно? Это в 2005 году SQL Server. thnak ты !!sql query return null

Select 
    distinct RepDailyInfo.Date 
from 
    RepDailyInfo 
left outer join 
    RepDailyCollection c 
on 
    c.RepDailyCollectionID = RepDailyInfo.RepDailyInfoID 
where 
    RepDailyInfo.RepID = 205 and c.IsReceived = 0 

Edit:

Когда я использую другой ХП похож на это работает отлично.

Select i.Date 
--i.RepDailyInfoID, i.RepID, i.TypeofDayID, i.CommuniTeeID, sum(cast(c.AmountSold as numeric(10,2))) as AmountSold, 
-- sum(cast (c.AmountCollected as numeric(10,2))) as AmountCollected, c.NewCompanyName,c.PaymentMethod, 
-- c.TypeofCreditCard, c.CheckNumber, c.Invoice, c.Spots, TypeofDay.TypeofDay, CommuniTee.City, CommuniTee.State, 
-- CommuniTee.year, SalesRep_Info.FirstName, SalesRep_Info.LastName 
from RepDailyInfo i 
left outer join RepDailyCollection c on i.RepDailyInfoID = c.RepDailyInfoID 
left outer join TypeOfDay on TypeOfDay.TypeofDayID = i.TypeofDayID 
left outer join SalesRep_Info on SalesRep_Info.RepID = i.RepID 
left outer join CommuniTee on CommuniTee.CommuniTeeID = i.CommuniTeeID 
where i.RepID = 205 and c.IsReceived = 0 
group by i.RepDailyInfoID, i.Date, i.TypeofDayID, i.CommuniTeeID, SalesRep_Info.FirstName, TypeofDay.TypeofDay, 
CommuniTee.City, CommuniTee.State, CommuniTee.year, SalesRep_Info.FirstName, 
SalesRep_Info.LastName, i.RepID, c.NewCompanyName, c.PaymentMethod, c.TypeofCreditCard, c.CheckNumber, c.Invoice, c.Spots 
order by SalesRep_Info.FirstName desc 

ответ

0

Здесь несколько вещей не так.

В первом запросе у вас есть:

Select 
    distinct RepDailyInfo.Date 
from 
    RepDailyInfo 
left outer join 
    RepDailyCollection c 
on 
    c.RepDailyCollectionID = RepDailyInfo.RepDailyInfoID 
where 
    RepDailyInfo.RepID = 205 and c.IsReceived = 0 

Даже если вы говорите, «левое внешнее соединение», из-за где положение вы, возможно, также сказал внутреннее соединение.

Независимо от того, этот запрос не совпадает со вторым. Во втором запросе вы присоединяетесь к RepDailyCollection в RepDailyInfo по адресу . ОПИСАНИЕ ИНФОРМАЦИИ. В первом запросе вы присоединяетесь к совершенно другим столбцам.

+0

Вы правы Крис. Я перепутал запросы. :-(Я понимаю, что могло пойти не так. Спасибо за ваше время! – Ram

0

Где у вас есть "LEFT JOIN ... ON ... = RepDailyInfo.RepDailyInfoID", следует, что на самом деле быть "LEFT JOIN ... ON ... = RepDailyInfo.RepDailyCollectionID"?

+0

См. Раздел редактирования, он отлично работает и дает мне даты, но не реальный вопрос, который я задал. – Ram

+0

Я рад, что вы получили свой ответ. Я просто знаю, что я не получаю никаких результатов, когда я не согласен с полями, к которым я присоединяюсь. – Brian

0

Это может быть поле varchar/char?

c.IsReceived = '0' 
+0

Нет, это логическое :-( – Ram

0

Там могут быть записи в RepDailyCollection с IsReceived = 0 и RepID = 205, но если нет каких-либо записей в RepDailyInfo с repid 205, то никакие записи не будут возвращены из-за вашей ИНЕКЕ.

На основании вашего заявления

Есть строки в RepDailyCollection с IsReceived = 0 для RepID = 205

Это звучит, как ваш, где положение должно быть:

c.RepID = 205 and c.IsReceived = 0 

вместо от

RepDailyInfo.RepID = 205 and c.IsReceived = 0 
+0

Спасибо, но у меня есть строки в RepDailyInfo с RepID = 205 – Ram

+0

В RepDailyCollection нет столбца RepID. Я дважды проверил :-(Является ли проблема из-за объединения? – Ram

+0

Пожалуйста, посмотрите на часть редактирования вопроса. Хотя я могу получить результаты с помощью отредактированной части, мне интересно, что было не так с начальным вопросом, на который я спросил .. Спасибо за ваше время @abe – Ram

0

для тестирования .. вы можете сделать следующий запрос ..

Select distinct c.IsReceived from RepDailyInfo 
left outer join RepDailyCollection c on c.RepDailyCollectionID = RepDailyInfo.RepDailyInfoID 
where RepDailyInfo.RepID = 205 and c.IsReceived = 0 

если вы можете увидеть 0, то этот столбец должен быть varchar2 тип данных ..

затем использовать следующий запрос \

Select distinct RepDailyInfo.Date from RepDailyInfo 
left outer join RepDailyCollection c on c.RepDailyCollectionID = RepDailyInfo.RepDailyInfoID 
where RepDailyInfo.RepID = 205 and c.IsReceived = '0' 
+0

IsReceived is true или false. :-( – Ram

+0

Не могли бы вы посмотреть правую часть вопроса Pratik? Хотя я могу получить результаты, мне интересно, что было не так с начальным вопросом, который я задал. – Ram

+0

Я написал, что вы просите только о sql. скажите, пожалуйста, почему вы сравниваете значение типа boolean на 0>? это в sql server ..> в oracle вы можете напрямую проверить логическое значение с 'true' или' false' –