Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];

Вниз

Запрос   Найти похожие ветки 

 
Александр Иванов ©   (2008-04-01 15:37) [0]

Не пойму в чем дело. Вчера отладил запрос. Сегодня внес небольшие изменения и он перестал работать. Изменения откатил, но ситуация не измнилась. В таблице PartnerCodes есть записи, остальные таблицы пустые. Ожидаю получить список записей из этой таблицы и нули в суммах и количестве, однако получаю пустой набор значений. Если убрать условия, то набор возвражается правильный, но напомню, что таблицы пустые.

SELECT PartnerCodes.ID, PartnerCodes.Name, COUNT(BannerRequests.ID) AS Requests, COUNT(BannerTours.ID) AS Tours,
Sum(IsNull(Payments.Amount, 0)) AS Amount, COUNT(BannerClicks.ID) AS Clicks
FROM PartnerCodes
LEFT OUTER JOIN BannerClicks ON PartnerCodes.ID = BannerClicks.PartnerCodeID
LEFT OUTER JOIN BannerTours ON PartnerCodes.ID = BannerTours.PartnerCodeID
LEFT OUTER JOIN BannerRequests ON PartnerCodes.ID = BannerRequests.PartnerCodeID
LEFT OUTER JOIN Payments ON PartnerCodes.ID = Payments.PartnerCodeID
WHERE PartnerCodes.UserID = @ID AND BannerClicks.ClickDate >= @DateFrom AND BannerClicks.ClickDate <= @DateTo
AND BannerRequests.RequestDate >= @DateFrom AND BannerRequests.RequestDate <= @DateTo
AND Payments.Amount > 0 AND BannerTours.TourDate >= @DateFrom AND BannerTours.TourDate < @DateTo
AND Payments.PaymentDate <= @DateTo AND Payments.PaymentDate >= @DateFrom
GROUP BY PartnerCodes.ID, PartnerCodes.Name


 
Александр Иванов ©   (2008-04-01 15:38) [1]

Да, забыл упомянуть, что это MS SQL 2005


 
ANB   (2008-04-01 15:52) [2]

1)

> WHERE PartnerCodes.UserID = @ID

Вот этот кусочек проверить первым делом


 
Александр Иванов ©   (2008-04-01 15:54) [3]

Проверял в первую очередь, с ним работает. Комментировал остальные условия - работает, раскомментирую хоть одно дополнительно - не работает.
Не работает - возвращает пустой набор данных.


 
clickmaker ©   (2008-04-01 16:00) [4]


> [3] Александр Иванов ©   (01.04.08 15:54)

outer join и and в where плохо сочетаются
если так

LEFT OUTER JOIN BannerTours ON PartnerCodes.ID = BannerTours.PartnerCodeID
and BannerTours.TourDate >= @DateFrom AND BannerTours.TourDate < @DateTo

ну и т.д.


 
Александр Иванов ©   (2008-04-01 16:03) [5]

Да, оно, спасибо.
Теперь не могу избавиться от мысли - значит раньше запрос работал неверно? :) Так как был JOIN и условие тоже, но что-то возвращал :)


 
clickmaker ©   (2008-04-01 16:07) [6]


> Так как был JOIN и условие тоже, но что-то возвращал :)

ну когда по joiny что-то находил, то условие срабатывало, естественно


 
Johnmen ©   (2008-04-01 16:13) [7]

Данный запрос [0] вообще не должен возвращать верные результаты, если таблицы, соединяемые с основной, не являются справочниками.
А во-вторых, IsNull лишнее. По определению.


 
Александр Иванов ©   (2008-04-01 16:16) [8]


> А во-вторых, IsNull лишнее. По определению.

Спасибо. Добавил в свое время, так как сумма вернула NULL. Значит запрос действительно был неверный изначально.


 
Johnmen ©   (2008-04-01 16:21) [9]


>  Добавил в свое время, так как сумма вернула NULL

Так м.б. если все складываемые значения оказались NULL.
Поскольку лично я не представляю такой ситуации, то написал [7] про IsNull. Хотя теоретически возможно...


 
evvcom ©   (2008-04-11 10:22) [10]

если SUM складывает только нульные значения, то возвращается null, потому для такого случая IsNull все же не лишний.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.042 c
3-1207905476
Новичек
2008-04-11 13:17
2008.10.12
Поля BOLLEAN в FireBird


15-1218227369
Real
2008-08-09 00:29
2008.10.12
Анимация печати от производителя


15-1219231255
TUser
2008-08-20 15:20
2008.10.12
О как!


6-1193993911
Artik
2007-11-02 11:58
2008.10.12
Запуск программ по сети.


2-1219171581
+++vist+++
2008-08-19 22:46
2008.10.12
Динамический массив записей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский