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

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

Подскажите как написать запрос !!! [D7, XP]


Страницы:   1 2

AlekseyB ©   (2008-09-18 11:01:00) 

Вообщем идея такая :
Нужно из одно таблички выбрать нужные данные и положить их в другую табличку.
Есть табличка из которой будем брать данные:

Name      Kol     ID

111         10      1
222          5       1
111          12     2

Моя табличка такая: (т.е. то что должно получиться)

Name    Osn     Dop

111        10       12
222         5        1

Вообщем отбор идет по условию, т.е. по полю ID, если ID=1 то значение Kol ложим в Osn, а если ID=2, то в Dop

Name,т.е. у них одинаковое

Заранее спасибо


AlekseyB   (2008-09-19 11:51:00) [1]


> > а не гимороем составления запросов к кривым таблицам..
> .
> таблица может и нормальная (т.к. чужая к примеру), это понятия
> и желания у него кривые...
> ну вот почему главное в попытке "схлопывания" название,
> когда тут еще всплыл артикул товара (покопать то может и
> список связанных баркодов найдется и все остальное...)
> одно название может быть у совершенно разных вещей
> ну, например представим что там есть еще поле (а скорее
> всего и не одно...)  
> COD_ARTIC   NAME_ARTIC     ATTRIBUTE                PRICE
> ПРЕ567              Шкаф             Дуб, Полироль      
>     $18000
> ОРН564             Шкаф              Дсп, Офисный      
>    $300
> ЛОД65              Стул               Кожа              
>          $100
> РРР98               Стул               Металл, пластик  
>      $20
> т.е. понятно, что вещи хотя и с одним названием совершенно
> разные, с разной ценой и всем остальным, т.е. полностью
> запись а не только артикул (!!!). а он пытается объединить
> по названию, а остальное судя по всему взять от разных записей.
> .. будет после из всех один шкаф из мореного дуба с ценой
> шкафа из дсп... "гениально!". (ну или чтото типа, в зависимости
> от того какие там поля присутствуют в реальности)


Умно !!! Красиво размышлять не запретишь !!! :-)


sniknik   (2008-09-19 11:14:00) [2]

> а не гимороем составления запросов к кривым таблицам...
таблица может и нормальная (т.к. чужая к примеру), это понятия и желания у него кривые...
ну вот почему главное в попытке "схлопывания" название, когда тут еще всплыл артикул товара (покопать то может и список связанных баркодов найдется и все остальное...)
одно название может быть у совершенно разных вещей
ну, например представим что там есть еще поле (а скорее всего и не одно...)  
COD_ARTIC   NAME_ARTIC     ATTRIBUTE                PRICE
ПРЕ567              Шкаф             Дуб, Полироль          $18000
ОРН564             Шкаф              Дсп, Офисный          $300
ЛОД65              Стул               Кожа                       $100
РРР98               Стул               Металл, пластик       $20
т.е. понятно, что вещи хотя и с одним названием совершенно разные, с разной ценой и всем остальным, т.е. полностью запись а не только артикул (!!!). а он пытается объединить по названию, а остальное судя по всему взять от разных записей... будет после из всех один шкаф из мореного дуба с ценой шкафа из дсп... "гениально!". (ну или чтото типа, в зависимости от того какие там поля присутствуют в реальности)


Johnmen   (2008-09-19 10:12:00) [3]

....
SELECT COD_ARTIC,      
 SUM(case when ID_SCLAD=2 then REZ_KOLCH else 0 end),  
 SUM(case when ID_SCLAD=3 then REZ_KOLCH else 0 end),
 MIN(NAME_ARTIC)
....

Обращаю внимание на отсутствие дистинкта.
Но главный совет - заняться проектированием, а не гимороем составления запросов к кривым таблицам...


031178   (2008-09-19 10:01:00) [4]

Есть поле COD_ARTIC - это типа артикул товара, а еще в этой же табличке есть поле NAME_ARTIC - это типа наименование, т.е. наименование может быть одно, а артикулы разные. Типа :

NAME_ARTIC     COD_ARTIC

Шкаф              ПРЕ567
Шкаф              ОРН564
Стул               ЛОД65
Стул                РРР98

Вот и необходимо добавить еще поле NAME_ARTIC в мою табличку


Johnmen   (2008-09-19 09:40:00) [5]


> Можно ли ка нить еще лдно поле добавить ?

Можно. А значение поля какой записи д.б. взято?


AlekseyB   (2008-09-19 08:51:00) [6]

Делаю вот так :

insert into ZAYAVKA..Tovar(_Art_Tovar,_Kolch,_Og)
SELECT distinct COD_ARTIC,      
               SUM(case when ID_SCLAD=2 then REZ_KOLCH else 0 end),  
               SUM(case when ID_SCLAD=3 then REZ_KOLCH else 0 end),
FROM Om2008..SCL_ARTC
GROUP BY COD_ARTIC

Да, все работает замечательно, но мне нужно еще дно поле выдернуть из таблицы Om2008..SCL_ARTC. И если я его пытаюсь также выдернуть как и те которые есть , то он ругается, что не может. Можно ли ка нить еще лдно поле добавить ?


sniknik   (2008-09-19 08:43:00) [7]

AlekseyB   (18.09.08 14:01) [21]
> Сделал вот так, но все равно неправильно выдает данные :
суммы поверх условий не хватает. посмотри на другие запросы сдесь и подумай, в них то ты ее используешь.


AlekseyB   (2008-09-19 08:08:00) [8]


> SELECT
>  Name,
>  SUM((2-ID)*Kol),  
>  SUM((ID-1)*Kol)
> FROM Table
> GROUP BY Name


А если мне необходимо еще одно поле из этой же таблички ? Можно как то это реализовать. Так то работает, но если я хочу еще одно поле, то не получается


Johnmen   (2008-09-18 14:36:00) [9]


> а оно там было?

Ну, если вдруг было :)


ПРавильный$Вася   (2008-09-18 14:31:00) [10]


> налицо кривое проектирование

а оно там было?


Johnmen   (2008-09-18 14:28:00) [11]

SELECT
 Name,
 SUM((2-ID)*Kol),  
 SUM((ID-1)*Kol)
FROM Table
GROUP BY Name

PS
А в общем налицо кривое проектирование...


Труп Васи Доброго   (2008-09-18 14:08:00) [12]


> легко, например - группировка + два "сум" по одному и тому
> же полю с условием которое в зависимости от другого поля
> либо отдает значение либо ноль.

Ты мне это рассказываешь? В моём сообщении как раз и есть такой запрос, если ты его читал внимательно.
Я спрашивал не о возможности, а о том, как именно он хочет получить результат - сложить, перемножит, найти среднее или ещё чего другого.


AlekseyB   (2008-09-18 14:01:00) [13]

> clickmaker ©   (18.09.08 13:39) [20]
>
> > [19] AlekseyB   (18.09.08 13:37)
>


Сделал вот так, но все равно неправильно выдает данные :

insert into ZAYAVKA..Tovar(_Name_Tovar,_Art_Tovar,_Kolch,_Og)
select NAME_ARTIC,COD_ARTIC,
     (case when ID_SCLAD = 1 then REZ_KOLCH else 0 end),
     (case when ID_SCLAD = 2 then REZ_KOLCH else 0 end)
from Omsk2008..SCL_ARTC


clickmaker   (2008-09-18 13:39:00) [14]

> [19] AlekseyB   (18.09.08 13:37)

там end не хватает в case
так ты ж результаты этого уже получил. См. [18]


AlekseyB   (2008-09-18 13:37:00) [15]


> insert into table2(Name, Osn, Dop)
> select Name,
>  (case when ID = 1 then Kol else 0),
>  (case when ID = 2 then Kol else 0)
> from table1


Сделал вот так, но что то говорит некоректный синтаксис, хотя ничего не менял.


clickmaker   (2008-09-18 13:32:00) [16]

можно, кстати, смержить

111        10       0
111         0       12
222         5        1

update table2 set Dop = (select Dop from table2 t2 where t2.Name = Name and Osn = 0)
where Dop = 0
delete from table2 where Osn = 0


clickmaker   (2008-09-18 13:17:00) [17]

Name      Kol     ID

111         10      1
222          5       1
111          12     2

Моя табличка такая: (т.е. то что должно получиться)

Name    Osn     Dop

111        10       12
222         5        1

Вообщем отбор идет по условию, т.е. по полю ID, если ID=1 то значение Kol ложим в Osn, а если ID=2, то в Dop

insert into table2(Name, Osn, Dop)
select Name,
 (case when ID = 1 then Kol else 0),
 (case when ID = 2 then Kol else 0)
from table1

update table2
from table2 t2 inner join table1 on table1.Name = t2.Name
set Osn = (case when Osn = 0 then Kol else Osn),
 Dop = (case when Dop = 0 then Kol else Dop)
from table2 inner join table1 on table1.Name = table2.Name


oldman   (2008-09-18 13:13:00) [18]


> табличек будет достаточно или надо все таки еще что то сделать
> ?


Даже твоя Tovar не нужна, если хочешь именно запросом.


AlekseyB   (2008-09-18 13:02:00) [19]


> int64  


Честно сказать совсем запутался, т.е. получается, что у нас работают 3 таблицы ? Илия я что то путаю ? Допустим у меня есть исходная таблица SCLAD и моя табличка Tovar, куда мне необходимо перенести данные. Этих табличек будет достаточно или надо все таки еще что то сделать ?


AlekseyB   (2008-09-18 12:49:00) [20]


> а врзможны двк зваиси такого плана?
>
> Name      Kol     ID
> 111         10      1
> 111         15      1
>


я УЖЕ ГОВОРИЛ, ЧТО НЕТ !!


Страницы:   1 2

Наверх

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