Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Вычисляемое поле


Автор: alexIrish 27.8.2007, 13:58
Здраvствуйте.
Надеюсь Все кто хотел здорово погуляли на встречe участникоv форума.

Возникла воt такая проблема.
Как создать вычисляемое полe Select ... Таблица1.поле1 / (Таблица2.поле1 гдe Таблица1.поле2=Таблица2.поле 2) As FieldName.... 

Spasibo.

Автор: Akina 27.8.2007, 15:21
Так и создать:

Код

Select (Таблица1.поле1 / Таблица2.поле1) As CalculatedField
From Таблица1, Таблица2
Where (Таблица1.поле2=Таблица2.поле2)

Автор: alexIrish 31.8.2007, 13:31
Прошу прошение, есть дополнение к теме.

Таблица1
Номер Т |  Материал | Kолво | Юзер | Дата
1                   а                  3       Коля     22.02.07               
2                   б                  4       Петя     23.02.07                        
2                   в                  2       Петя     23.02.07                            
3                   а                  10     Вася     24.02.07  

....
Таблица2
Материал | Колво в 1й коробке        
   а                       1                          
    б                      2                         
     ц                     4
.....

Нужен запрос ~ :
Select Count( Distinct Таблица1.[Номер Т]) as F1, count (Таблица1.[Номер Т] as F2,
SUM (Kолво) as F3, SUM( IIF (Таблица1.Материал Exist (Таблица2.Материал), Таблица1.Kолво/Таблица2.[Колво в 1й коробке] Where Таблица1.Материал =Таблица2.Материал) , NULL) as [Kолво Коробок], Таблица1.Юзер,Таблица1.Дата
Group by Таблица1.Юзер,Таблица1.Дата

Pроблема v вычисляемом полe [Колво коробок]
Спасибо.

Автор: Akina 31.8.2007, 16:07

M
Akina
  1. Пользуемся тегами Код (для кода)
  2. Пользуемся тегами Цитата (для таблиц данных)
  3. Пишем текст запроса построчно, с отступами, чтобы видна была структура
  4. Пишем запросы без синтаксических ошибок

Переделайте постинг.

Автор: alexIrish 31.8.2007, 16:23
Цитата

Таблица1
Номер Транзакции |  Материал | Kолво | Юзер | Дата
1                   а           3      Коля   22.02.07               
2                   б           4      Петя   23.02.07                        
2                   в           2      Петя   23.02.07                            
3                   а          10      Вася   24.02.07  

....
Таблица2
Материал | Колво в 1й коробке        
   а                       1                          
   б                       2                         
   ц                       4
.....


Если бы я знал как написать етот запрос без ошибок, я бы наверное сделал бы ето сам. ;)
Я знаю что Аксесс не поддерживает структуру Count(Distinct ...). И написал только что бы дать понять что запрос должен вернуть как подсчет кол-ва всех линий транзакций, так и колво самих транзакций.
Код

Select 
Count( Distinct Таблица1.[Номер Т]) as F1, 
count (Таблица1.[Номер Т] as F2,
SUM (Kолво) as F3, 
SUM( IIF (Таблица1.Материал Exist (Таблица2.Материал), Таблица1.Kолво/Таблица2.[Колво в 1й коробке] Where Таблица1.Материал =Таблица2.Материал) , NULL) as [Kолво Коробок], Таблица1.Юзер,Таблица1.Дата
Group by Таблица1.Юзер,Таблица1.Дата

Опять же понимаю что вот ето не правильно:
Цитата

SUM( IIF (Таблица1.Материал Exist (Таблица2.Материал), Таблица1.Kолво/Таблица2.[Колво в 1й коробке] Where Таблица1.Материал =Таблица2.Материал) , NULL) as [Kолво Коробок], 

И спрашиваю как сделать что бы было правильно. smile 

Rgds,

Автор: Akina 31.8.2007, 18:27
Цитата(alexIrish @  31.8.2007,  17:23 Найти цитируемый пост)
написал только что бы дать понять что запрос должен вернуть как подсчет кол-ва всех линий транзакций, так и колво самих транзакций.

Во-первых, запрос НЕ ДАЕТ возможности это понять.
Во-вторых, от словесного пояснения намного понятнее пока не стало.
В третьих, написанный запрос состоит сплошь из ошибок (скажем, секция From просто отсутствует)

Давай-ка все-таки просто сформулируй задачу. Потому что пока понятно одно - какие имеются исходные данные. А чтобы сразу сформулировать понятно - попробуй сперва ее рассказать какому-нить знакомому, понятия не имеющему, над чем ты работаешь, да так, чтобы он понял...

Автор: alexIrish 1.9.2007, 01:09
Хорошо мы пойдем другим путем.
таблица1 отображет движение материалов по складу компании( какой материал , сколько,кем и когда переместили) каждое передвижение/транзакция имеет свой уникальный номер (Номер Т),  и может включать несколько линий( т.е разных материалов, т.е. можно взять несколько разных материалов из разных мест и переместить их вдругое место за одну транзакцию)
таблица2 показывает упаковку материалов ( колво частей в одной коробке)нo содержит информацию не о всех возможных материалах что есть на складе.

надо составить отчет, показывающий сколько всего Юзер/оператор сделал транзакций, сколько всего  линий включают ети транзакции(сколько локейшинов посетил оператор), колво перемещенных частей , КОЛВО перемещенных КОРОБОК (если есть информация в таблице2, если материала нет в таблице 2, то ячейка пустая) за день/неделю/месяц.

Jа рассказал задачу жене, котаря в IT только знает Интернет и Е-маил, она поняла.  smile   

Автор: bopoha 1.9.2007, 11:53
Вопрос по поводу таблицы2. Почему на основании справочника об упаковке товара, делается вывод о наличии коробок?

Решение.
Не вижу смысле создавать очень сложный но один зарпос. Это тяжело сопровождать.
Запрос очень простой, нужно объединить таблицы:
Код

SELECT [Таблица1].*, [Таблица2].Материал
FROM [Таблица1] RIGHT JOIN [Таблица2] ON [Таблица1].Материал = [Таблица2].Материал


А дальше этот запрос сделать источником данных отчета. При помощи отчета можно произвести нужные группировки по уровням, подсчеты количества и сумм в пределах группы. И самое главное - фильтр по дате очень просто наложить при открытии. Поле [Таблица2].Материал будет равно Null, если нет соответствующей записи в Таблице2.

Второй вариант решение, программный расчет (с использованием запросов конечно) во временную таблицу (развернутую, как предыдущий запрос). Это необходимо тогда, когда данных очень много, а запрашиваются маленькие временные периоды. В этом случае отчет будет работать (группировать) быстрее. И совсем маленький бонус - отчет получается хранимым и к нему можно возратиться.

Цитата(alexIrish @  1.9.2007,  01:09 Найти цитируемый пост)
Jа рассказал задачу жене, котаря в IT только знает Интернет и Е-маил, она поняла.

Я бы тоже понял, чтобы отвязались smile.

Автор: alexIrish 2.9.2007, 02:18
Цитата

Вопрос по поводу таблицы2. Почему на основании справочника об упаковке товара, делается вывод о наличии коробок?

 А вывод о наличии не делается. Информация об упаковке берется что бы определить обьем транзакции. На основании колва самого матриала ето сделать сложно, т.к. можно переместить 1000 винтов по 1000 в коробке и 1000 LCD eкранов по 10 в коробке. А pо количеству коробок можно более четко проанализировать продуктивность работы операторов на складе (по мнению менеджера логистики).

за совет обьединить таблицы в запросе спасибо. Вижу свет в конце тонеля.
Pо крайней мере следующим запросом получу колво коробок.

Автор: Anark1 2.9.2007, 10:07
Не очень правильная проектировка БД. Если за одну транзакцию можно перебросить несколько материалов, то придется создавать в таблице1 столько записей, сколько было пакетов для одной транзакции. Я бы создал зависимую таблицу

Код

Table3
ID  |  Материал  |  ...  | TR_ID


Где, TR_ID поле внешнего ключа, которое ссылается на Таблица1.Номер_Транзакции.
Тогда будет возможность использовать уникальность поля Номер_транзакции в таблице1. И плюс уменьшился бы вес БД.

Автор: alexIrish 2.9.2007, 20:09
А я базу и не проектировал. 
За основ берется отчет из системы SAP, который просто выгружает на сетевой диск техтовый файл со всеми транзакциями за неделю.
Моя задача все ето перелопатить так что бы менеджеры видели наглядно то чего они хотят видеть. Ну не нравится им сама SAP.
A желания у них разные и меняются раз от раза. И создавать( читать проектировать) базы для етого считаю нет необходимости. Идем наиболее легким и быстрым путем. Все в Access, пoтом запросами выбираем то чего надо, считаем, если нужна история то заносим в итоговые таблицы.
И красиво показываем, с диаграммами и прочей чепухой. У меня зарплата почасовая, могу позволить себе потренероваться smile
За совет спасибо.

Автор: Anark1 2.9.2007, 20:35
В таком случае, вопрос исчерпан ?  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)