Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.53 MB
Время: 0.037 c
1-1093523375
ОлегО
2004-08-26 16:29
2004.09.12
Ввод данных


14-1093265478
Kerk
2004-08-23 16:51
2004.09.12
Жизнь прекрасна!


1-1093598663
Mim1
2004-08-27 13:24
2004.09.12
Использование графики в формате Jpeg в CLX


4-1091263785
Senti
2004-07-31 12:49
2004.09.12
Вопрос по окнам


1-1093522220
mouse_web
2004-08-26 16:10
2004.09.12
РageСontrol скрыть закладку