Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как разделить данные на 10 групп? / 21 сообщений из 21, страница 1 из 1
09.06.2004, 15:56:44
    #32554622
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
Вопрос вот какой, у меня есть имущество с различной степенью износа (от 0 до 100%) мне нужно в запросе разделить всё имущество на 10 групп: от 0 до 10% - первая группа, от 11 до 20% - вторая и т.д.
В табличке 150000 записей

Как это можно сделать?
На ум лезет много If-ов, но это глючно (я писал недавно в форуме, что аксесс вылетает), да и тупо это выглядит 10 ифов вложенных :)

Может кто такое уже проделывал? Спасибо
...
Рейтинг: 0 / 0
09.06.2004, 16:00:58
    #32554633
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
ЧТо значит разделить на 10 групп?

- сгурппировать в одном select
- проставить номер группы в новый столбец
- свое

Давайте нам пример:
- структура таблицы
- тестовые данные
- что хотите получить

Телепаты в отпуске (с) не мой
...
Рейтинг: 0 / 0
09.06.2004, 16:01:49
    #32554637
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
select *, (-int(-износ/10)) as группа from запрос
...
Рейтинг: 0 / 0
09.06.2004, 16:02:15
    #32554640
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
зы. (с) Владимир Саныч
...
Рейтинг: 0 / 0
09.06.2004, 16:02:56
    #32554647
lobodava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
Если процент износа это число, то может это поможет:

Код: plaintext
1.
SELECT Int(Износ/ 10  + 1 ) As ГруппаИзноса
FROM tblMyTable
...
Рейтинг: 0 / 0
09.06.2004, 16:09:25
    #32554665
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
lobodavaЕсли процент износа это число, то может это поможет:

Код: plaintext
1.
SELECT Int(Износ/ 10  + 1 ) As ГруппаИзноса
FROM tblMyTable


тогда уж
Код: plaintext
1.
SELECT iif(Износ= 0 ,  1 , (Износ+ 9 )\ 10 ) As ГруппаИзноса
FROM tblMyTable

ибо группа 1 состоит из 11 элементов, а остальные из 10
...
Рейтинг: 0 / 0
09.06.2004, 16:10:58
    #32554675
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
Опять меня ни за что ни про что откопирайтили...
...
Рейтинг: 0 / 0
09.06.2004, 16:11:14
    #32554676
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
Да, а в моем случае
select *, (-int(-износ/10)-(износ=0)) as группа from запрос
...
Рейтинг: 0 / 0
09.06.2004, 16:12:27
    #32554679
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
2 Саныч

вот за это тебя откопирайтили :)
Как округлить число
...
Рейтинг: 0 / 0
09.06.2004, 16:16:01
    #32554697
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
GeoДа, а в моем случае
select *, (-int(-износ/10)-(износ=0)) as группа from запрос

не явное преобразование типов - однако
а так сразу и не догадаешься
круто завернул :)
мнеб и в голову не пришло
дык - так и мой вариант можно переделать :)

Код: plaintext
1.
SELECT (Износ+ 9 )\ 10  - (Износ= 0 ) As ГруппаИзноса
FROM tblMyTable

чтоб без iif :)
...
Рейтинг: 0 / 0
09.06.2004, 16:20:09
    #32554711
Lela
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
Вот, а я бы в цикле 10 раз выполняла бы запрос на выборку и там... добавление куда надо(в группу) с передачей параметра на выборку увеличенного на 10
...
Рейтинг: 0 / 0
09.06.2004, 16:29:11
    #32554736
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
И долго мы будем гадать?

Автора в студию!!!
...
Рейтинг: 0 / 0
09.06.2004, 16:32:09
    #32554754
lobodava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
Код: plaintext
1.
SELECT (Износ+ 9 )\ 10  - (Износ= 0 ) As ГруппаИзноса
FROM tblMyTable

(Износ=0) при истине = (-1) !!!
поэтому

Код: plaintext
1.
SELECT (Износ+ 9 )\ 10  + (Износ= 0 ) As ГруппаИзноса
FROM tblMyTable
...
Рейтинг: 0 / 0
09.06.2004, 16:33:34
    #32554758
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
2 paparome
Не совсем так. Оригинал правильнее:

Код: plaintext
1.
2.
3.
4.
5.
6.
Износ     (Износ+9)\10 - (Износ=0)
  0                   1
  0,5                 0
  1                   1
  10                  1
  10,5                1
  11                  2
...
Рейтинг: 0 / 0
09.06.2004, 16:35:07
    #32554766
lobodava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
Да, сам понял что не прав.
...
Рейтинг: 0 / 0
09.06.2004, 16:51:47
    #32554824
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
2 Geo
А где сказано что поле износ не целое?

Судя по
от 0 до 10% - первая группа, от 11 до 20% - вторая и т.д.
как раз целое, т.к. <=10 - это первая группа, а вторая только от >=11
т.е. нет четкого указания, куда попадет часть между 10 и 11.

А так - да, твой вариант более корректный :)
...
Рейтинг: 0 / 0
11.06.2004, 07:01:37
    #32557340
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
Я видимо не очень доходчиво описал задачу, либо не понял ваших предложений. Теперь подробнее напишу (кстати я уже сделал, создав функцию в VBA с теми самыми 10 if , которые правда не глючат, использую её в запросе, а функция возвращает номер группы. Кстати как тут в форуме воткнуть код, чтобы он цветной стал?)
Вот в чём фишка. Мне нужно имущество разбить не по износу, а по коеффициенту изношенности = 100% - остаточная стоимость/балансовая ст-ть*100%.
Всё имущество должно распределиться на 10 групп: 0-10; 10-20; 20-30;30-40;40-50;50-60;60-70;70-80;80-90;90-100.
Вообще у меня запрос с группировкой по группам, который считает суммы балансовой, остаточной и количество объектов в группе - тут всё работает нормально.
Только вот что проскальзывает: если я в запросе ставлю условия на выборку (к примеру хочу отобрать только 1 и 2 группы) часть записей выбирается нормуль, а в какой-то момент вылазиет ошибка (это если убираю группировку и хочу просто объекты из групп выбрать)

Вот функция, которая у меня делит всё на группы. Как я понимаю она выполняется для каждой записи.

Что у меня не так?
vv - коэффициент износа, он в запросе считается
Вот строка запроса
"Группа износа: round_group(100-Round([Остаточная]/[Балансовая]*100;2))"

Function round_group(ByVal vv As Double) As Integer
If vv >= 0 And vv < 10 Then
round_group = 1
Else
If vv >= 10 And vv < 20 Then
round_group = 2
Else
If vv >= 20 And vv < 30 Then
round_group = 3
Else
If vv >= 30 And vv < 40 Then
round_group = 4
Else
If vv >= 40 And vv < 50 Then
round_group = 5
Else
If vv >= 50 And vv < 60 Then
round_group = 6
Else
If vv >= 60 And vv < 70 Then
round_group = 7
Else

If vv >= 70 And vv < 80 Then
round_group = 8
Else

If vv >= 80 And vv < 90 Then
round_group = 9
Else

If vv >= 90 And vv <= 100 Then
round_group = 10
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If


End Function
...
Рейтинг: 0 / 0
11.06.2004, 07:05:31
    #32557341
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
Это работает
--------------------------------
SELECT round_group(100-Round([Остаточная]/[Балансовая]*100,2)) AS [Группа износа], Count([_БАЗА (2004-05)].[Инв №]) AS [Кол-во], Sum([_БАЗА (2004-05)].Балансовая) AS [Балансовая ст-ть], Sum([_БАЗА (2004-05)].Остаточная) AS [Остаточная ст-ть]
FROM SPR_Контрагент_18 INNER JOIN [_БАЗА (2004-05)] ON SPR_Контрагент_18.Код = [_БАЗА (2004-05)].[Шифр контрагента]
WHERE ((([_БАЗА (2004-05)].[Вид ОС]) Like "0101*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0201*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0202*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0203*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "020401*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "020402*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0205*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0206*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0208*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0209*") AND (([_БАЗА (2004-05)].[Степень использования])="07" Or ([_БАЗА (2004-05)].[Степень использования])="08"))
GROUP BY round_group(100-Round([Остаточная]/[Балансовая]*100,2));
--------------------------------
А вот это выдаёт вышеописанную ошибку
--------------------------------
SELECT round_group(100-Round([Остаточная]/[Балансовая]*100,2)) AS [Группа износа], [_БАЗА (2004-05)].[Инв №] AS [Кол-во], [_БАЗА (2004-05)].Балансовая AS [Балансовая ст-ть], [_БАЗА (2004-05)].Остаточная AS [Остаточная ст-ть]
FROM SPR_Контрагент_18 INNER JOIN [_БАЗА (2004-05)] ON SPR_Контрагент_18.Код = [_БАЗА (2004-05)].[Шифр контрагента]
WHERE (((round_group(100-Round([Остаточная]/[Балансовая]*100,2)))=1 Or (round_group(100-Round([Остаточная]/[Балансовая]*100,2)))=2) AND (([_БАЗА (2004-05)].[Вид ОС]) Like "0101*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0201*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0202*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0203*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "020401*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "020402*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0205*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0206*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0208*" Or ([_БАЗА (2004-05)].[Вид ОС]) Like "0209*") AND (([_БАЗА (2004-05)].[Степень использования])="07" Or ([_БАЗА (2004-05)].[Степень использования])="08"));
--------------------------------
...
Рейтинг: 0 / 0
11.06.2004, 07:37:01
    #32557358
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
Функция читается тоскливо. Для таких случаев вместо If следует применять инструкцию Select Case.
...
Рейтинг: 0 / 0
11.06.2004, 09:11:22
    #32557413
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
Нда :(
Без пол литры не разобраться.

А предлагали тут аналог вашей функции - только без нее, т.е. можно заменить вашу функцию выражением, в данном случае таким
1 + w \ 10 + (w=100)
(w=100) - это для того, чтобы при 100 выдавал 10, а не 11
для большей чиабельности можно так:
iif(w=100; 10; 1 + w \ 10)

ЗЫ: для красивости используй кнопку
Код: plaintext
[SRC]
(для SQL кода)
и ту же кнопку, только руками впиши
Код: plaintext
[SRC VBA]
(для VBA кода)
...
Рейтинг: 0 / 0
16.06.2004, 09:52:26
    #32562877
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить данные на 10 групп?
Спасибо :) Смеялся, прочитав "без поллитра не разберёшься" :)
Попробую
Код: plaintext
Проверка
Понятно, что надо переделать в Select Case - будет время переделаю, щас не горит.
Жалко, что никто не написал почему выходит ошибка...
Видимо нужно поставить поллитра :)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как разделить данные на 10 групп? / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]