Главная страница
    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.51 MB
Время: 0.03 c
14-1093256734
Slider007
2004-08-23 14:25
2004.09.12
Shift+Insert


3-1092898569
jappak
2004-08-19 10:56
2004.09.12
Как игнорировать помечанные записи.


14-1093435367
Суслик
2004-08-25 16:02
2004.09.12
Фотки с встречи дельфистов


14-1092989958
ИМХО
2004-08-20 12:19
2004.09.12
AVI -> DVD


14-1093067609
kaZaNoVa
2004-08-21 09:53
2004.09.12
TThread и через CreateThread





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский