![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите как написать запрос !!! [D7, XP]
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
>
я УЖЕ ГОВОРИЛ, ЧТО НЕТ !!