Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите плз с запросом  [new]
Ученикян
Member

Откуда:
Сообщений: 8
Делаю выборку из 3-х таблиц в DTS ЫЙД 2000 с дальнейшей выгрузкой в *.txt файл

SELECT Tovar.id, Tovar.idGroup, Tovar.BarKod,
Skl.idTovar, Skl.Kol, Skl.R1, Skl.idPerson, Price.C1
FROM
Tovar INNER
JOIN
Skl ON Tovar.id = Skl.idTovar INNER
JOIN
Price ON Tovar.id = Price.id
WHERE
(Skl.idPerson = 3) OR
(Skl.idPerson = 2726)
ORDER BY Tovar.id, Tovar.idGroup, Tovar.BarKod,
Skl.idTovar, Skl.Kol, Skl.R1, Skl.idPerson, Price.C1

Получаю следующую таблицу
id idGroup BarKod idTovar Kol R1 idPerson C1
4294 1 3777 4294 -72 90 3 684000
4296 1 3774 4296 -2 29 3 402000
4952 1 3766 4952 -98 116 3 139200
4952 1 3766 4952 150 0 2726 139200
4954 1 3768 4954 55 117 3 139200
4954 1 3768 4954 140 0 2726 139200
6330 51 26680 6330 2 1 3 4981200


Мне необходимо получить таблицу след. вида
Если id yникальный(id=4294 например), idPerson может =3 или =2726
id idGroup BarKod idTovar Kol+R1 C1
4294 1 3777 4294 (-72+90)=18 684000


Если id повторяется (id=4952 например), в первой строке idPerson=3, в другой idPerson=2726, необходимо получить строку вида
id idGroup BarKod idTovar Kol_id1+R1_id1+Kol_id2+R1_id2 C1
4952 1 3766 4952 (-98+116+150+0)=168 139200
3 ноя 11, 00:01    [11543398]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
iljy
Member

Откуда:
Сообщений: 8711
Ученикян,

GROUP BY
3 ноя 11, 00:38    [11543509]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
Ученикян
Member

Откуда:
Сообщений: 8
iljy,
не знаю как это сделать :(
3 ноя 11, 11:03    [11544599]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
SELECT Tovar.id, Tovar.idGroup, Tovar.BarKod, Skl.idTovar, SUM(Skl.Kol+Skl.R1) as X, Skl.idPerson, Price.C1
FROM
Tovar INNER
JOIN
Skl ON Tovar.id = Skl.idTovar INNER
JOIN
Price ON Tovar.id = Price.id
WHERE
(Skl.idPerson = 3) OR
(Skl.idPerson = 2726)
GROUP BY Tovar.id, Tovar.idGroup, Tovar.BarKod,Skl.idTovar, Skl.idPerson, Price.C1
ORDER BY Tovar.id, Tovar.idGroup, Tovar.BarKod,Skl.idTovar, Skl.idPerson, Price.C1
3 ноя 11, 11:10    [11544667]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
Ученикян
Member

Откуда:
Сообщений: 8
Glory,
спасибо, но получается не совсем то, что хотелось бы? а именно

Если id уникальный, то суммируется Kol+R1 - это правильно
id idGroup BarKod idTovar X idPerson C1
4294 1 3777 4294 18 3 684000
4296 1 3774 4296 27 3 402000
4952 1 3766 4952 18 3 139200
4952 1 3766 4952 150 2726 139200


Мне еще необходимо дополнительно складывать одинаковые id (у них разные idPerson), т.е.
id idGroup BarKod idTovar X idPerson C1
4294 1 3777 4294 18 3 684000
4296 1 3774 4296 27 3 402000
4952 1 3766 4952 168 * 139200
3 ноя 11, 11:34    [11544896]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ученикян
4952 1 3766 4952 18 3 139200
4952 1 3766 4952 150 2726 139200

Если вы не заметили, то эти записи различаются по полю idPerson
3 ноя 11, 11:41    [11544964]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
Ученикян
Member

Откуда:
Сообщений: 8
Glory,заметил, но и написал выше

Мне еще необходимо дополнительно складывать одинаковые id (у них разные idPerson), т.е.
3 ноя 11, 11:43    [11544983]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ученикян
Glory,заметил, но и написал выше

Написали что ? Какой из idPerson должен остаться ?
3 ноя 11, 11:46    [11545016]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7498
select id, case when count(idPerson)=1 then cast(min(idPerson) as nvarchar(30)) else '*' end b
from (select 1 id, 1 idPerson union all
      select 1, 2 union all
      select 2, 1) as S
group by id
3 ноя 11, 11:54    [11545081]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
Ученикян
Member

Откуда:
Сообщений: 8
Glory,
извините, наверное не совсем ясно выразился.
idPerson нужен только для того чтобы отобрать товары с нужных складов, т.е. idPerson=3 и idPerson=2726 и все. Выгружать это не обязательно.

В итоге мне нужно получить общее кол-во товаров на 2-х складах (Kol(idperson=3)+R1(idperson=3)+Kol(idperson=2726)+R1(idperson=2726))
Вот
3 ноя 11, 12:24    [11545338]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
Ученикян
Member

Откуда:
Сообщений: 8
env,
не совсем понятно как внедрить Ваш код в мой
3 ноя 11, 12:43    [11545530]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ученикян
idPerson нужен только для того чтобы отобрать товары с нужных складов, т.е. idPerson=3 и idPerson=2726 и все. Выгружать это не обязательн

Так и непонятно, должен быть idPerson в результатах(!) запроса или нет
3 ноя 11, 12:56    [11545661]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
Ученикян
Member

Откуда:
Сообщений: 8
Glory,

idPerson в результатах не нужен

вообще в базе несколько idPerson 3,4,269,998,2726. (складов)

но данные нужны только с idPerson=3 и idPerson=2726
3 ноя 11, 13:04    [11545739]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ученикян
idPerson в результатах не нужен

Ну так уберите его из запроса, кроме части where
3 ноя 11, 13:09    [11545778]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз с запросом  [new]
Ученикян
Member

Откуда:
Сообщений: 8
Glory,

Сенкс, все ОК, то что надо
3 ноя 11, 16:30    [11547407]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить