Текущий архив: 2004.09.12;
Скачать: CL | DM;
Вниз
Помогите с SQL 2 Найти похожие ветки
← →
Вика (2004-08-17 18:13) [0]Подскажите плиз SQL для осуществления следующего запроса:
select"ом выбирается (из таблицы cards) некоторое подмножество записей (использованных карточек). Теперь мне надо узнать сколько карт этого подмножества карт относится к каким дилерам (есть таблица дилеров и в cards - соответственно поле номера дилера). Как это сделать ?
← →
Соловьев © (2004-08-17 18:32) [1]select d.name_diler, c.name_card
from cards c join diler d on (c.fk_diler=d.pk_diler)
where c.name_card = "bla-bla"
← →
Desdechado © (2004-08-17 18:33) [2]select count(card), dealer from cards, dealers
group by dealer
← →
Соловьев © (2004-08-17 18:33) [3]
> [2] Desdechado © (17.08.04 18:33)
связать надо как-то таблицы
← →
Desdechado © (2004-08-17 18:35) [4]эт ясно :)
яж снова направление поиска писал, а не готовый код
← →
app © (2004-08-17 20:48) [5]Оформляй тему, нумерация хороша в базах, а не темах :-)
← →
Desdechado © (2004-08-17 21:10) [6]?
какая нумерация?
какая тема?
← →
Skyle © (2004-08-18 08:00) [7]
> 6] Desdechado © (17.08.04 21:10)
Чуть ниже есть та же тема, но без цифры. ;-)
2Вика: Отзовусь лучше здесь. По ночам я форум не читаю, так что не обессудьте... домохозяйка.. ;-)
По теме:
Пусть у нас есть таблица Dealers, поля Dealers.Id - номер, Dealer.Name - название дилера. В таблице Cards пусть будет поле DealerNum, которое есть ключ, связанный с Dealers.Id. Тогда запрос будет такой.
SELECT D.Name, Count(C.ID) AS CardsAmount
FROM Cards C
INNER LOOP JOIN Dealers D ON D.Id = C.DealerNum
WHERE C.Status = "USED"
GROUP BY C.DealerNum
← →
Вика (2004-08-18 10:44) [8]> Skyle ©
Спасибо большое, что все-таки отозвались :))))
Вобщем у меня получился такой запрос:
with ReportSQL.SQL do begin
Clear;
Add("SELECT D.name, count(C.idcard) as CardsAmount ");
Add("FROM cards C ");
Add("INNER LOOP JOIN dillers D ON D.id=C.numdiller)");
Add("WHERE C.status = " + #39 + "USED" + #39 );
Add("AND C.statuschange IS NOT NULL ");
Add("AND (C.statuschange BETWEEN :reportDateFirst AND :reportDateLast ) ");
Add("GROUP BY C.dillernum " );
Parameters.ParseSQL(SQL.Text, True);
Parameters.ParamByName("reportDateFirst").Value := ReportDateBegin.Date;
Parameters.ParamByName("reportDateLast").Value := ReportDateEnd.Date;
end;
try
Open;
except
on E:Exception do ShowMessage(E.Message);
end;
Т.е. в итого надо получить число использованных карт по каждому дилеру за какой-то период времени (выбираемый вручную) и записать все это как-то в отчет. Так вот, данный запрос выдает ошибку синтаксиса в операторе JOIN:
"Project Cards.exe raised exception class EOleExcepton with messege "[Microsoft][Драйвет ODBC Microsoft Access]Ошибка синтаксиса в операции JOIN". Prosess stopped ..."
← →
Skyle © (2004-08-18 10:50) [9]Нету возможности проверить, но может попробовать иначе?
НапримерFROM Cards C, Dillers D
WHERE C.Status = "USED" AND D.Id = C.NumDiller
← →
Вика (2004-08-18 10:58) [10]2 Соловьев © [1]
Такой запрос тоже пробовала и таже самая ошибка синтаксиса в операторе JOIN... :(((
← →
Соловьев © (2004-08-18 10:59) [11]
> Такой запрос тоже пробовала и таже самая ошибка синтаксиса
> в операторе JOIN... :(((
полный текст запроса плиз.
← →
Skyle © (2004-08-18 11:02) [12]
> Соловьев © (18.08.04 10:59)
Возможно всё проще и Access не понимает хинта LOOP.
2Вика: а если убрать LOOP заработает?
← →
Соловьев © (2004-08-18 11:05) [13]
> Возможно всё проще и Access не понимает хинта LOOP.
так у меня и нету его:)
← →
Вика (2004-08-18 11:06) [14]2 Соловьев © [11]
with ReportSQL.SQL do begin
Clear;
Add("SELECT D.name, C.status ");
Add("FROM cards C ");
Add("JOIN dillers D ON (C.numdiller=D.id) ");
Add("WHERE C.status = " + #39 + "USED" + #39 );
Add("AND C.statuschange IS NOT NULL ");
Add("AND (C.statuschange BETWEEN :reportDateFirst AND :reportDateLast ) ");
Parameters.ParseSQL(SQL.Text, True);
Parameters.ParamByName("reportDateFirst").Value := ReportDateBegin.Date;
Parameters.ParamByName("reportDateLast").Value := ReportDateEnd.Date;
end;
try
Open;
except
on E:Exception do ShowMessage(E.Message);
end;
← →
Skyle © (2004-08-18 11:08) [15]
> Соловьев © (18.08.04 11:05)
А я не тебе, я в
> [8] Вика (18.08.04 10:44)
:-)))
> [14] Вика (18.08.04 11:06)
Возможно ругается на отсутствие типа объединения?
> Add("JOIN dillers D ON (C.numdiller=D.id) ");
Может INNER всё-таки оставить? Не знаю, что там по дефолту и есть ли он, этот дефолт..
← →
Вика (2004-08-18 11:12) [16]INNER оставила, LOOP убрала, такая же ерунда...
А на запрос, который мне подсказал Соловьев © (17.08.04 18:32) [1] т.е. мой Вика (18.08.04 11:06) [14] уже выдается ошибка синтаксиса, но в операторе FROM ...
:((((((((((((((
← →
Соловьев © (2004-08-18 11:13) [17]
> Add("WHERE C.status = " + #39 + "USED" + #39 );
а почему тут параметр не используете?
← →
Вика (2004-08-18 11:14) [18]Это мне тоже кто-то подсказал вместо status="USED", когда такая конструкция (status="USED") не работала...
← →
Соловьев © (2004-08-18 11:16) [19]запустите ацес и создайте там этот запрос. я лично всегда там отлаживаю, а потом переношу на клиента.
← →
Вика (2004-08-18 12:23) [20]Запустила Access -> SQL:
SELECT D.name, C.status
FROM cards AS C
JOIN dillers AS D ON (C.numdiller=D.id)
WHERE C.status = "ИСПОЛЬЗОВАНА"
AND C.statuschange IS NOT NUL;
"Ошибка синтаксиса в предложении FROM"
← →
Соловьев © (2004-08-18 12:25) [21]там можно создать запрос вызуально. попробуйте соединить таблицы с помощью мышки(а потом посмотреть запрос в виде SQL)
← →
Вика (2004-08-18 12:26) [22]SQL 2 (предложенный Skyle © ):
SELECT D.name, count(C.idcard) AS CardsAmount
FROM cards AS C INNER JOIN dillers AS D ON D.id=C.numdiller
WHERE C.status="ИСПОЛЬЗОВАНА" And C.statuschange Is Not Null
GROUP BY C.dillernum;
"Попытка выполнить запрос, который не включает указанное выражение "name" как часть функции или группы"
← →
Соловьев © (2004-08-18 12:28) [23]
>
> SELECT D.name, count(C.idcard) AS CardsAmount
> FROM cards AS C INNER JOIN dillers AS D ON D.id=C.numdiller
> WHERE C.status="ИСПОЛЬЗОВАНА" And C.statuschange Is Not
> Null
> GROUP BY C.dillernum;
GROUP BY D.name
← →
Вика (2004-08-18 12:46) [24]Соловьев © и Skyle © Спасибо Вам огромное за помощь. Сама бы я сроду не разобралась с этим SQL... Все заработало :))))
Осталось только как-то эту результирующую таблицу "засунуть в отчет" (что я тоже не заню как делать :((( ) ...
← →
Skyle © (2004-08-18 12:51) [25]
> Осталось только
"Помогите с SQL -3". Coming soon...;-)
← →
Соловьев © (2004-08-18 12:53) [26]
> Осталось только как-то эту результирующую таблицу "засунуть
> в отчет" (что я тоже не заню как делать :((( ) ...
http://www.delphikingdom.com/asp/itemq.asp?mode=1&itemid=3
← →
Вика (2004-08-18 16:02) [27]"Помогите с SQL 3" не последует ... nto to be continued :)))
Я лучше в этой теме последний вопросик задам, если позволите:
как в цикле вывести в один столбец имена дилеров, а во второй число карт (cardsAmount). Я отчет делаю в Excel. Одну запись я знаю как возвращать: ReportSQL.FieldByName("name").AsString; а как в цикле перемещаться по полям и по записям?
Если юзать ReportSQL.Next, то распечатывает 2 раза последнюю запись.
Заранее thanx...
← →
Соловьев © (2004-08-18 16:04) [28]
> Если юзать ReportSQL.Next, то распечатывает 2 раза последнюю
> запись.
while not ReportSQL.Eof do begin
//чего-то творим
ReportSQL.Next;
end;
← →
Anatoly Podgoretsky © (2004-08-18 16:24) [29]Вика (18.08.04 16:02) [27]
Так надо, что бы тема была не SQL n, а описывала проблему.
Например для последнего вопроса, как перемещаться по полученого набора данных
Страницы: 1 вся ветка
Текущий архив: 2004.09.12;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.03 c