Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2013, 13:08   #1
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию mssql сортировка массива данных

Есть массив повторяющихся данных, например поступление товара на склад:
- сливы
- яблоки
- яблоки
- груши
- груши
- сливы,
нужно отсортировать их например по алфавиту :
- груши
- груши
- сливы
- сливы
- яблоки
- яблоки,
затем выполнить ряд действий только с грушами (подсчет кол-ва, остатка и т.д.) и только потом уже перейти к сливам и т.д.
в ручную прописывать ....where name = груши не вариант, так как наименований много.

Подскажите пожалуйста как это лучше организовать??

P.S. Так же имеются даты поступления, может как-то с их учетом?
Есть задача - реши ее!
ТипичныйСтудент вне форума Ответить с цитированием
Старый 04.07.2013, 13:15   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

погодите. Или я Вас не понимаю, или Вы опять всё путаете...

в конструкции SQL есть команда (оператор) ORDER BY
напишете
Код:
select ....... 
всё, что надо
ORDER BY НаименованиеТовара
получите в выборке данных алфавитный порядок по наименованию товара.

Цитата:
P.S. Так же имеются даты поступления, может как-то с их учетом?
можно и с учётом даты поступления. Это как Вам надо, так и сортируйте.

кстати, Вы книжку по SQL прочитали?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.07.2013, 16:25   #3
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
погодите. Или я Вас не понимаю, или Вы опять всё путаете...

в конструкции SQL есть команда (оператор) ORDER BY
напишете
Код:
select ....... 
всё, что надо
ORDER BY НаименованиеТовара
получите в выборке данных алфавитный порядок по наименованию товара.


можно и с учётом даты поступления. Это как Вам надо, так и сортируйте.

кстати, Вы книжку по SQL прочитали?!
я понимаю, что используя ORDER BY я получу выборку по алфавиту, но мне нужно повторять ряд действий (например несколько команд update) к КАЖДОЙ группе товаров, этот ряд действий одинаковый для слив, для груш, но пересекаться не должны.
Вот код:
Код:
declare @tbl table (dt datetime, pr int, obj int, kolvo numeric(18,6), cena money, summa money, ostatok numeric(18,6), sredcena money);
declare @a numeric(18,6);
insert into @tbl values('01.01.13', 1, 1, 10, 100, null, null, null)
insert into @tbl values('03.01.13', 1, 1, 20, 200, null, null, null)
insert into @tbl values('05.01.13', -1, 1, 15, null, null, null, null)
insert into @tbl values('06.02.13', 1, 1, 10, 300, null, null, null)
insert into @tbl values('07.02.13', -1, 1, 25, null, null, null, null)
insert into @tbl values('08.02.13', 1, 1, 10, 500, null, null, null)
insert into @tbl values('09.02.13', -1, 1, 10, null, null, null, null)
UPDATE @tbl SET summa = cena*kolvo;

update @tbl set 
@a=ostatok=isnull(kolvo,0)*pr+isnull(@a,0)

update @tbl set sredcena = summa/ostatok  where pr = 1;

select * from @tbl;
но в данном случае товар ОДИН (obj), а если их будет несколько, то сначала это все нужно будет применить к obj=1, затем к obj = 2 и т.д.
Есть задача - реши ее!
ТипичныйСтудент вне форума Ответить с цитированием
Старый 04.07.2013, 16:26   #4
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
погодите. Или я Вас не понимаю, или Вы опять всё путаете...

в конструкции SQL есть команда (оператор) ORDER BY
напишете
Код:
select ....... 
всё, что надо
ORDER BY НаименованиеТовара
получите в выборке данных алфавитный порядок по наименованию товара.


можно и с учётом даты поступления. Это как Вам надо, так и сортируйте.

кстати, Вы книжку по SQL прочитали?!
я понимаю, что используя ORDER BY я получу выборку по алфавиту, но мне нужно повторять ряд действий (например несколько команд update) к КАЖДОЙ группе товаров, этот ряд действий одинаковый для слив, для груш, но пересекаться не должны.
Вот код:
Код:
declare @tbl table (dt datetime, pr int, obj int, kolvo numeric(18,6), cena money, summa money, ostatok numeric(18,6), sredcena money);
declare @a numeric(18,6);
insert into @tbl values('01.01.13', 1, 1, 10, 100, null, null, null)
insert into @tbl values('03.01.13', 1, 1, 20, 200, null, null, null)
insert into @tbl values('05.01.13', -1, 1, 15, null, null, null, null)
insert into @tbl values('06.02.13', 1, 1, 10, 300, null, null, null)
insert into @tbl values('07.02.13', -1, 1, 25, null, null, null, null)
insert into @tbl values('08.02.13', 1, 1, 10, 500, null, null, null)
insert into @tbl values('09.02.13', -1, 1, 10, null, null, null, null)
UPDATE @tbl SET summa = cena*kolvo;

update @tbl set 
@a=ostatok=isnull(kolvo,0)*pr+isnull(@a,0)

update @tbl set sredcena = summa/ostatok  where pr = 1;

select * from @tbl;
но в данном случае товар ОДИН (obj), а если их будет несколько, то сначала это все нужно будет применить к obj=1, затем к obj = 2 и т.д.
Есть задача - реши ее!
ТипичныйСтудент вне форума Ответить с цитированием
Старый 04.07.2013, 16:32   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
то сначала это все нужно будет применить к obj=1, затем к obj = 2 и т.д.
ломайте привычное мышление. Не надо никаких "сналча к obj=1, потом к obj=2 и т.д." (строго говоря, конечно, на T-SQL можно и последовательно обработать данные, это несложно, но это НЕ НУЖНО!)
обрабатывать нужно ВСЁ данные одновременно, только для каждого типа obj получать СВОИ значения (остатков, средней цены и т.д. и т.п)
Для этого достаточно использовать агрегатные функции и GROUP BY obj



p.s. кстати, жаль, что Вы так и не поняли, что не нужно хранить остатки, среднюю цену и прочую динамически вычисляемую статистику в таблице (в прошлой теме Вам об этом говорили много-много-много раз!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.07.2013, 18:12   #6
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ломайте привычное мышление. Не надо никаких "сналча к obj=1, потом к obj=2 и т.д." (строго говоря, конечно, на T-SQL можно и последовательно обработать данные, это несложно, но это НЕ НУЖНО!)
обрабатывать нужно ВСЁ данные одновременно, только для каждого типа obj получать СВОИ значения (остатков, средней цены и т.д. и т.п)
Для этого достаточно использовать агрегатные функции и GROUP BY obj



p.s. кстати, жаль, что Вы так и не поняли, что не нужно хранить остатки, среднюю цену и прочую динамически вычисляемую статистику в таблице (в прошлой теме Вам об этом говорили много-много-много раз!)
на этом настоял мой руководитель
можно чуть подробнее, где именно использовать GROUP BY?? до update, после, в нем?
Есть задача - реши ее!

Последний раз редактировалось ТипичныйСтудент; 04.07.2013 в 20:29.
ТипичныйСтудент вне форума Ответить с цитированием
Старый 04.07.2013, 21:19   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
на этом настоял мой руководитель
сочувствую. это, как минимум, вызывает сомнения в его компетентности...


но это всё лирика...
Цитата:
то сначала это все нужно будет применить к obj=1, затем к obj = 2 и т.д.
Вы идею получать нужные данные по сгруппированным строчкам уловили?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.07.2013, 11:28   #8
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
Сообщение

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

но это всё лирика...
Вы идею получать нужные данные по сгруппированным строчкам уловили?
нет я не пойму как группировать, до update или во время и как это оформить.
написать самой первой командой select * from @tbl group by obj?
Есть задача - реши ее!
ТипичныйСтудент вне форума Ответить с цитированием
Старый 05.07.2013, 16:56   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

заполнить список остатков суммой прихода по наименованиям
1. составить список наименований (дополнить(добавить) при необходимости)
дополнить список остатков
Код:
insert into tablostatok (naim, calcsum, calkolvo)  --добавить к списку 
select distinst naim, 0 as summ, 0 as kolvo  --все различные наименования
from tablprihod  -- из таблицы поступлений
where not exists ( select niam from tablostatok where tablprihod.naim=tablostatok.niam) --которых еще нет там
2. персчитать суммы по каждому наименованию
Код:
update tablostatok set --корректровать 
calcsum=calcsum + sumprihod,  --сумму остатка на сумму прихода 
 calccolvo =calcolvo + kolvoprihod  --объем прихода
from tablostatok 
inner join ( select naim, 
                 sum(summprihod) as sumprihod,  --рассчитать сумму прихода 
                 sum(kolvo) as kolvoprihod  --объем прихода
                from tableprihod 
               group by naim  --по каждому наименованию
            ) as calcprihod on tablostatok.naim = calprihod.naim
вывести реультат для просмотра в алфавитном порядке
Код:
select naim, calcsum, calckolvo
from tablostatok
order by naim  --получить для просмотра в алфавитном порядке
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 05.07.2013 в 17:07.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Двухсторонняя привязка к базе данных (C#, MSSQL CE) Nezaam C# (си шарп) 8 01.04.2012 10:36
Оптимальная структура данных для бд MSSQL privet010 БД в Delphi 5 02.02.2011 12:01
Сложная сортировка массива данных april115582 Microsoft Office Excel 2 13.05.2010 17:38
ASP.NET // C# // Выборка данных из MSSQL Veiron ASP.NET 4 15.03.2009 17:43