Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно написать SQL [D6, XP]


Страницы:   1 2 3

Yurij-7 ©   (2008-02-29 14:14:00) 

Уважаемые мастера, прошу помощи.
Есть табличка:

Город                      Продукт        Состояние
*******                 *********
Город2                    Яблоки          Продано
Город2                    Персик          Везут
Город3                    Персик          Везут
Город4                    Банан            На складе

Хочу получить табличку вида:

Город           Продано        Везут      На складе
****************************************
Город2              1                 1
Город3                                 1
Город4                                              1

Не могу собственно понять как написать запрос, есть таблица справочник городов, и таблица товара, напрашивается чтото на вложенный запрос но не пойму как,  
подскажите пож.

Спасибо.


Johnmen   (2008-03-02 14:55:00) [1]


> Yurij-7   (02.03.08 13:59) [56]

Ну, во-первых, я этого не предлагал, ни в каком виде. И предложить не мог, ибо на основании [19] запросы из запросов и вложенные запросы отсутствуют.
Я предлагал [21], уточнено [23].
Также стОит обратить внимание на [15].
А в общем настоятельно рекомендую всё же читать ответы. Все и внимательно.


Yurij-7   (2008-03-02 13:59:00) [2]

Наконецто получилось инет возобновить.
спасибо всем за ответы, пошел по пути
Johnmen ©   (29.02.08 15:59) [21]

а именно
SELECT name, a.st1, a.st2, a.st3
FROM

(
SELECT braqnch_manager,
count( if(STATUS = 'Статус1', 1, NULL ) ) AS st1,
count( if(STATUS = 'Статус2', 1, NULL ) ) AS st2,
count( if(STATUS = 'Статус3', 1, NULL ) ) AS st3
FROM cs
GROUP BY braqnch
) AS a

left JOIN spr_name ON branch = a.braqnch_manager
ORDER BY branch

Но что самое интересное не работает чтотос псевдонимами My SQL а именно ( запрос) as A а к нему присоединяю имена регионов .....

еслу у кого есть коментарии буду благодарен ...


Германн   (2008-03-01 02:56:00) [3]


> Anatoly Podgoretsky ©   (01.03.08 02:48) [54]
>
> > Anatoly Podgoretsky  (01.03.2008 02:47:53)  [53]
>
> Кстати я в отпуске и запускаю свой сервер, наконец получил
> все железо.
> А какие правильные SQL я буду на нем писать.
>

Поздравляю! И с отпуском, и с получением железа. Зависть гложет меня по обоим пунктам :)
По поводу "правильных SQL", я надеюсь, мы ещё потрепемся. :)
(Хоть я и ламер в SQL :)


Anatoly Podgoretsky   (2008-03-01 02:48:00) [4]

> Anatoly Podgoretsky  (01.03.2008 02:47:53)  [53]

Кстати я в отпуске и запускаю свой сервер, наконец получил все железо.
А какие правильные SQL я буду на нем писать.


Anatoly Podgoretsky   (2008-03-01 02:47:00) [5]

> Германн  (01.03.2008 02:46:52)  [52]

Ну он не выдержал такого позора.


Германн   (2008-03-01 02:46:00) [6]

Во! Именно тут APClient и перенервничал!
Anatoly Podgoretsky ©   (29.02.08 23:42) [50]


Johnmen   (2008-03-01 02:26:00) [7]


> palva ©   (29.02.08 17:29) [48]
> Извините, если обидел.

Меня обидеть невозможно.
А то, что на "вы" - не извиню :)
И, кстати, надо было сразу же настаивать на верности своего ответа в доходчивой форме - типа "проверил - результат абсолютно верный"...

Yurij-7   (29.02.08 17:24) [47]
> То: Johnmen ©   (29.02.08 15:59) [21]
> к сожалению вообще не работает ((

Так это же схема. Ты что, следующие посты не читал???

Anatoly Podgoretsky ©   (29.02.08 23:42) [50]

Это пусть автор переживает. Его предупредили :))


Anatoly Podgoretsky   (2008-02-29 23:42:00) [8]

> Johnmen  (29.02.2008 14:53:09)  [9]

Даже если известно и неизменно, но это не отметает законов Паркинсона.EDе так уж и редок, если не заниматься батонокидательством. Вариант с Control гарантирует результат, вариант с Components не всегда.


Palladin   (2008-02-29 17:32:00) [9]


> Yurij-7   (29.02.08 17:19) [46]

если уловил суть содеяного, можешь и на PHP портировать
все что не касается Delphi постится в Прочее, что бы не путать отвечающих


palva   (2008-02-29 17:29:00) [10]


Johnmen ©   (29.02.08 17:01) [44]
> Сарказм неуместен, ИМХО.

Извините, если обидел. Мне было важно найти изъян в своих собственных представлениях о мире и SQL.


Yurij-7   (2008-02-29 17:24:00) [11]

То: Johnmen ©   (29.02.08 15:59) [21]

к сожалению вообще не работает ((


Yurij-7   (2008-02-29 17:19:00) [12]

То: Palladin ©   (29.02.08 16:58) [41]

Спасибо за помощь, чесно сказать даже неудобно что вы столько кода написали.
но я это делаю через связку MySQL + PHP, в Делфи я то примерно понимаю как сделать ....


Yurij-7   (2008-02-29 17:10:00) [13]

То: ANB   (29.02.08 16:22) [30]

А это под какую СУБД вы написали, просто у меян под MySQL не работает,
я так понимаю что конструкция вида
SELECT a.Город, (

SELECT count( Продукт )

не поддерживается ((((


Johnmen   (2008-02-29 17:01:00) [14]


> Претензии к тому, что он кривой и имеет сущностные ошибки...

Сарказм неуместен, ИМХО.


Johnmen   (2008-02-29 17:00:00) [15]


> palva ©   (29.02.08 16:44) [37]
> Сущностная? Чего-то не понимаю я в этой жизни.

Наверное.

Хотя, я не прав, и запрос [15] верен в сущности - не разлядел слова LEFT.


palva   (2008-02-29 17:00:00) [16]


> того что нужно не 1,0, а количество товара сгруппированных
> по городу и состоянию о чем я тебе и сказал в Palladin ©
>   (29.02.08 14:54) [11]
>

Мой запрос выдает что-то другое?
Претензии ведь не к тому, что мой запрос выдает неправильные данные или работает неэффективно. Здесь вопросов не возникает.
Претензии к тому, что он кривой и имеет сущностные ошибки...


Palladin   (2008-02-29 16:58:00) [17]


> Yurij-7   (29.02.08 16:48) [39]

тогда все очень просто...

Var
Col,Cols,Rows:TStringList;
i,n:Integer;
strHTMLTable:String;

Cols:=TStringList.Create;
Rows:=TStringList.Create;
Cols.Sorted:=True;
Rows.Sorted:=True;
q.sql.text:='select город, состояние, count(продукт) from табличка group by город, состояние';
q.Open;
While not q.Eof Do
Begin
 n:=Rows.IndexOf(q.Fields[0].AsString);
 If n=-1 Then n:=Rows.AddObject(q.Fields[0].AsString,TStringList.Create);
 Col:=TStringList(Rows.Objects[n]);
 If Cols.IndexOf(q.Fields[1].AsString)=-1 Then Cols.Add(q.Fields[1].AsString);
 Col.AddObject(q.Fields[1].AsString,TObject(q.Fields[2].AsInteger));
 q.Next;
End;

strHTMLTable:='<table>';
For i:=0 to Rows.Count-1 Do
Begin
 Col:=TStringList(Rows.Objects[i]);
 Col.Sorted:=True;
 strHTMLTable:=strHTMLTable+'<tr>';
 For j:=0 to Cols.Count-1 Do
  Begin
   n:=Col.IndexOf(Cols[j]);
   If n=-1
    Then strHTMLTable:=strHTMLTable+'<td>0</td>'
    Else strHTMLTable:=strHTMLTable+'<td>'+IntToStr(Integer(Col.Objects[n]))+'</td>';
  End;
 strHTMLTable:=strHTMLTable+'</tr>';
 Col.Free;
End;
q.Close;

Cols.Free;
Rows.Free;


могут быть ошибки, писал здесь


Palladin   (2008-02-29 16:48:00) [18]

о, туплю и невнимателен, просшу просчения... у тебя же там функции стоят...


Yurij-7   (2008-02-29 16:48:00) [19]

То: Palladin ©   (29.02.08 16:39) [36]

Ну как, делаю запрос, получаю НД, а потом его в вэб страничку переношу


Palladin   (2008-02-29 16:46:00) [20]


> palva ©   (29.02.08 16:44) [37]

того что нужно не 1,0, а количество товара сгруппированных по городу и состоянию о чем я тебе и сказал в Palladin ©   (29.02.08 14:54) [11]


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо