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

Откуда:
Сообщений: 2
вот сижу, пытаюсь уже который день написать правильный запрос... Люди добрые, помогите.
есть две таблицы:
одна Competitions с полями
IDCompetition, Name, DateStart, DateEnd, Adress и др. (написал те, которые нужно выводить)
и таблица Voting с полями:
IDCompetition, IDCompetitor, Login, Active и др. (вывести надо только поле Active; IDCompetition, IDCompetitor и Login - составной ключ)

задача запроса следующая: нужно вывести записи по поля IDCompetition, Name, DateStart, DateEnd, Adress и Active (при этом в таблице Voting может не быть записей с IDCompetition, которые есть в таблице Competitions, но их нужно тоже вывести - следовательно нужно использовать LEFT OUTER JOIN с ON Competitions.IDCompetition = Voting.IDCompetition), но проблема в том, что в таблице Voting есть записи с одинаковыми IDCompetition (различаются IDCompetitor и Login), но с разным значением 1 или 0, а нужно показать их одной записью со значением 1, если со значением 1 нету, то с 0...

пробовал вывести это все через такой запрос (для этого пришлось тип поля Active менять с bit на smallint):

SELECT Voting.IDCompetition, Name AS Название, DateStart AS Начало, DateEnd AS Окончание, Adress AS Адрес, MAX(Active) as Активность
FROM Competitions
LEFT OUTER JOIN Voting
ON Competitions.IDCompetition = Voting.IDCompetition
WHERE (DateStart <= CONVERT (date, GETDATE()))
AND (DateEnd >= CONVERT (date, GETDATE()))
GROUP BY Voting.IDCompetition, Name, DateStart, DateEnd, Adress
ORDER BY DateStart


и все бы хорошо (все замечательно выводится), но если в таблице Voting нет ни одной записи с IDCompetitions из таблицы Competitions, то значение поля IDCompetition в выводимой таблице этой записи = NULL

P.S. сильно не ругайте, только начинаю осваивать SQL... спасибо за помощь (:
23 янв 12, 19:31    [11955629]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простеньким запросом...  [new]
1
Guest
надо в SELECT не Voting.IDCompetition а Competitions.IDCompetition
23 янв 12, 20:42    [11956076]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простеньким запросом...  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
не только в select,а еще и в group by соответтвенно
и того :
SELECT Competitions.IDCompetition, Name AS Название, DateStart AS Начало, DateEnd AS Окончание, Adress AS Адрес
, MAX(Active) as Активность
FROM Competitions
LEFT OUTER JOIN Voting ON Competitions.IDCompetition = Voting.IDCompetition
WHERE CONVERT (date, GETDATE()) between DateStart and DateEnd
GROUP BY Competitions.IDCompetition, Name, DateStart, DateEnd, Adress
ORDER BY DateStart
23 янв 12, 20:52    [11956143]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простеньким запросом...  [new]
Svirinstel
Member

Откуда:
Сообщений: 2
оу, точно, спасибо большое...
вот что делает банальная невнимательность...

естественно, когда я беру ID из Voting он не всегда будет и следовательно будет = Null...
23 янв 12, 23:52    [11957045]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить