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

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

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2014, 17:15   #11
goodday29
Пользователь
 
Регистрация: 21.11.2013
Сообщений: 16
По умолчанию

эх было бы это все так легко))полное условие звучит так, например для удобства в приведенной мной таблице не 27 строк,а 100 ,в столбце атрибут какая-то часть группа1 ,другая группа2 ,надо поделить строки таблицы таким образом,чтобы
Коллектор1 получил 80%(80строк)
Коллектор2 получил 20%(20строк)
При этом,у первого коллектора, доля группа1 от общего числа(80) должна быть равна доле второго коллектораю
Например у первого коллектора 40 строк группы1(50%),тогда у второго коллектора тоже должно быть 50% группы1(10 строк).
Я пробывал с подзапросами top , может как нить с limit связать? Помогите плиз ,голова кругом уже))
goodday29 вне форума Ответить с цитированием
Старый 03.01.2014, 18:14   #12
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Пример таблицы и желаемое в студию, иначе - гадание на кофейной гуще
ReportCube вне форума Ответить с цитированием
Старый 03.01.2014, 23:00   #13
goodday29
Пользователь
 
Регистрация: 21.11.2013
Сообщений: 16
По умолчанию

Во вложении таблица.Там 27 строк соответственно одному коллектору должно пойти 80% (22 строки),а второму 20%(5 строк).При этом,у первого коллектора, доля группа2 от общего числа(22) должна быть равна доле второго коллектора.Получается ,что у 2го коллектора должно оказать две строки "группа2"(40% от общего числа(5)),а у 1го коллектора 8 строк с "группа2"(тоже 40% от общего числа(22строки))
Вложения
Тип файла: rar таблица.rar (7.9 Кб, 11 просмотров)
goodday29 вне форума Ответить с цитированием
Старый 03.01.2014, 23:25   #14
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Так что проще - всего 27 строк? Аккуратненько, ручками, разбиваем так, как нужно, а затем долго думаем - на каком основании Вами это было сделано. Если не сможете объяснить для себя - следовательно не хватает данных для принятия верного решения.
ReportCube вне форума Ответить с цитированием
Старый 04.01.2014, 00:32   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В лоб с процентами не получится точно отобрать. Например 20% от 17 записей интерпретируется как 4 записи, а не 3
Код:
SELECT U.*
  FROM (
    SELECT TOP 20 PERCENT 'Коллектор2' AS Коллектор,*
      FROM [Лист1$] WHERE Атрибут='Группа2' ORDER BY UP_client,ac13
    UNION
    SELECT TOP 80 PERCENT 'Коллектор1' AS Коллектор,*
      FROM [Лист1$] WHERE Атрибут='Группа2' ORDER BY UP_client DESC,ac13 DESC
    UNION
    SELECT TOP 20 PERCENT 'Коллектор2' AS Коллектор,*
      FROM [Лист1$] WHERE Атрибут<>'Группа2' ORDER BY UP_client,ac13
    UNION
    SELECT TOP 80 PERCENT 'Коллектор1' AS Коллектор,*
      FROM [Лист1$] WHERE Атрибут<>'Группа2' ORDER BY UP_client DESC,ac13 DESC) U
  ORDER BY Коллектор,UP_client,ac13
Можно подсчитать сначало количество
Код:
SELECT COUNT(*) AS C,SUM(IIF(Атрибут='Группа2',1,0)) AS C1,
    CInt(COUNT(*)*0.2) AS C2,
    CInt(SUM(IIF(Атрибут='Группа2',1,0))*CInt(COUNT(*)*0.2)/COUNT(*)) AS C3
  FROM [Лист1$]
C=27 C1=10 C2=5 C3=2 и запросом получить
Код:
SELECT U.*
  FROM (
    SELECT TOP 2 'Коллектор2' AS Коллектор,*
      FROM [Лист1$] WHERE Атрибут='Группа2' ORDER BY UP_client,ac13
    UNION
    SELECT TOP 8 'Коллектор1' AS Коллектор,*  -- 10-2
      FROM [Лист1$] WHERE Атрибут='Группа2' ORDER BY UP_client DESC,ac13 DESC
    UNION
    SELECT TOP 3 'Коллектор2' AS Коллектор,*   -- 5-2
      FROM [Лист1$] WHERE Атрибут<>'Группа2' ORDER BY UP_client,ac13
    UNION
    SELECT TOP 14 'Коллектор1' AS Коллектор,*  -- 27-10-5+2
      FROM [Лист1$] WHERE Атрибут<>'Группа2' ORDER BY UP_client DESC,ac13 DESC) U
  ORDER BY Коллектор,UP_client,ac13
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.01.2014, 12:16   #16
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Из сотен предполагаемых значений тоже через TOP n выборку делать?
ReportCube вне форума Ответить с цитированием
Старый 04.01.2014, 12:29   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Почему бы и нет в данном случае? Даже из десятков тысяч. Для чего такая эквилибристика нужна понятия не имею. Сам факт использования екселя в качестве базы много говорит о серьёзности задачи и скорее всего там ни кого не волнуют временные характеристики запроса.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.01.2014, 17:23   #18
goodday29
Пользователь
 
Регистрация: 21.11.2013
Сообщений: 16
По умолчанию

Спасибо за помощь, эксель не используется в качестве базы :D

Последний раз редактировалось goodday29; 04.01.2014 в 17:27.
goodday29 вне форума Ответить с цитированием
Старый 04.01.2014, 17:35   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Пример то экселевский. А если другая СУБД, то можно и поумней сделать, используя представления, хранимки, да мало какие еще возможности в конкретной базе
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.01.2014, 17:49   #20
goodday29
Пользователь
 
Регистрация: 21.11.2013
Сообщений: 16
По умолчанию

эксель вообще тут не причем.Просто для наглядности скинул в эксель. Так MS SQL используется. Но я только начал изучать,поэтому пока трудновато дается.
goodday29 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Деление столбцов на равные части 804040 Microsoft Office Excel 11 25.09.2019 20:34
Копирование части данных из одной таблицы в другую ekspert126 Microsoft Office Excel 2 24.08.2013 08:39
Копирование части данных из одной таблицы в другую SAM77777 Microsoft Office Excel 3 12.04.2011 19:24
Деление ФИО на три части ahvahsky2008 Microsoft Office Access 1 06.05.2010 08:39
авт. перенос данных из нескольких столбцов одной таблицы в один столбец другой таблицы A_ALL Microsoft Office Access 7 24.08.2009 21:13