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

Откуда: Россия
Сообщений: 6
Доброго времени суток
Дано:
Есть таблица, допустим tblOut, в которой, помимо прочего, есть два поля, допустим "fldOut" (Исх.№) и "fldOutDate" (Дата исх.)
Задача:
Создать запрос, возвращающий несколько полей, название каждого из которых совпадает с номером года, в каждом из которых будут выведены все исх.№ за этот год.

В первом приближении получил что-то вроде:
SELECT IIf(Year([fldOutDate])=2008,Replace(fldOut,"200/","")) AS 2008, IIf(Year([fldOutDate])=2009,Replace(fldOut,"200/","")) AS 2009
FROM tblOut

(Replace убирает ненужную для дальнейшей работы постоянную часть из исх.№)

Результат работы запроса выглядит примерно так:

2008 2009
2
4
5
10
15
.........5
.........7
.........11
.........20
.........23

Вопрос - есть ли способ убрать из результата работы запроса пустые места?
Чтобы было так:

2008 2009
2.......5
4.......7
5.......11
10......20
15......23

Заранее спасибо за советы
2 фев 19, 03:25    [21800276]     Ответить | Цитировать Сообщить модератору
 Re: Создание нескольких полей из одного  [new]
vmag
Member

Откуда: MP
Сообщений: 3203
nekromant11,

как-то задача криво стоит, обычно показывают что идет на вход (строки таблицы), что должно получиться на выходе (итоговые строки) и спрашивают как...
а тут входа нет, есть процесс с неправильным результатом и возможно правильный выход
2 фев 19, 03:55    [21800281]     Ответить | Цитировать Сообщить модератору
 Re: Создание нескольких полей из одного  [new]
nekromant11
Member

Откуда: Россия
Сообщений: 6
vmag, виноват. Ни разу не писал на форумах программистов.
В качестве примера (на точки не обращайте внимания)
Вход:
Таблица tblOut содержит два поля, исх.№ и дату:
fldOut........fldOutDate
200/1.........09.01.2008
200/5.........10.01.2008
200/10.......11.01.2008
200/2.........09.01.2009
200/4.........10.01.2009
200/20.......15.10.2009

Выход:
На выходе запроса хочу получить:
2008.....2009
1..........2
5..........4
10........20

sorry за кривую визуализацию
2 фев 19, 14:41    [21800403]     Ответить | Цитировать Сообщить модератору
 Re: Создание нескольких полей из одного  [new]
DarkMan
Member

Откуда:
Сообщений: 524
nekromant11
Вход:

nekromant11
Выход:

Почитайте здесь. https://www.sql.ru/forum/1308447/sformirovat-zapros . Может поможет .
2 фев 19, 17:09    [21800479]     Ответить | Цитировать Сообщить модератору
 Re: Создание нескольких полей из одного  [new]
nekromant11
Member

Откуда: Россия
Сообщений: 6
DarkMan, спасибо за подсказку. Пока запрос с TRANSFORM выдает мне какую-то дичь, но он уже работает, а не ругается на ошибку синтаксиса) По результатам доложу
3 фев 19, 09:19    [21800681]     Ответить | Цитировать Сообщить модератору
 Re: Создание нескольких полей из одного  [new]
nekromant11
Member

Откуда: Россия
Сообщений: 6
Спасибо за ожидание, задачу решил. Много времени потратил на фильтрацию входных данных.
Во вложении БД "dbEx.mdb", запрос qryExample02, исходная таблица tblOutEx, из которой убрано всё лишнее.
Собственно, это была промежуточная цель)
Основная - создать запрос, который бы было можно использовать в качестве RowSource для диаграммы, на которой по Х - дни, по Y - номера исходящих. За каждый год отдельный график. Задача уже решалась более простым способом - прямым заполнением таблицы данных диаграммы на VBA (пара вложенных циклов, в которых заносились значения в obj.Application.datasheet.Cells()). Всё бы хорошо, но безумно долго (на график за один год на разных машинах уходило до нескольких десятков секунд(!!!) И это всего около 2000 значений в исходной таблице). Я почему-то решил, что через запрос будет быстрее, однако вышло не совсем так, на выполнение запроса тоже уходит значительное время (хотя субъективно выполняется быстрее).
По сказанному два вопроса:
1. Есть ли способ ускорить построение диаграммы
2. Правильно ли сформирован запрос для использования его в качестве RowSource? И как можно настроить вид диаграммы, желательно на VBA. Можно просто ссылку на пример, я разберусь...

К сообщению приложен файл (dbEx.rar - 22Kb) cкачать
6 фев 19, 03:04    [21802297]     Ответить | Цитировать Сообщить модератору
 Re: Создание нескольких полей из одного  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6139
nekromant11,
не пробовали пользовать штатное средство создания диаграмм
должно быть установлено из "средста office": microsoft graph и "поддержка программирования .NET"

К сообщению приложен файл. Размер - 29Kb
6 фев 19, 10:50    [21802452]     Ответить | Цитировать Сообщить модератору
 Re: Создание нескольких полей из одного  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6139
nekromant11
....Основная - создать запрос, который бы было можно использовать в качестве RowSource для диаграммы, на которой по Х - дни, по Y - номера исходящих. За каждый год отдельный график...
Что-то не могу представить себе такой график:если имеются ввиду дни недели (которых 7 -то это куда не шло),но номера исходящих,которых за 2016 год 4 сотни??....
6 фев 19, 12:18    [21802582]     Ответить | Цитировать Сообщить модератору
 Re: Создание нескольких полей из одного  [new]
nekromant11
Member

Откуда: Россия
Сообщений: 6
sdku, мастер создания диаграмм в наличии, пока не смог ему объяснить, что же я хочу. Строит совсем не то, что нужно.
А насчет графика - это обычная почти прямая линия, наклон каждый год разный в зависимости от количества исх.№. Имеются ввиду не дни недели, а дни года, от 1 до 366, для чего пришлось специально создать табличку tblDay. Всего в году у подразделения от 2 до 4 тыс. исх., в график попадают не все, а лишь занесенные в таблицу tblOutEx. Польза от такого графика, разумеется, спорная, но я надеюсь здесь всех больше интересуют вопросы практической реализации...
6 фев 19, 17:57    [21802956]     Ответить | Цитировать Сообщить модератору
 Re: Создание нескольких полей из одного  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6139
nekromant11
sdku, мастер создания диаграмм в наличии, пока не смог ему объяснить, что же я хочу. Строит совсем не то, что нужно.
Строит то что "объяснили"
6 фев 19, 18:12    [21802974]     Ответить | Цитировать Сообщить модератору
 Re: Создание нескольких полей из одного  [new]
nekromant11
Member

Откуда: Россия
Сообщений: 6
Только скопировав результат запроса в Excel, догадался, в чем ошибка. Запрос выдает текстовые значения, которые не очень подходят для построения графиков. Когда преобразовал значения ячеек в числа, график Excel построил мгновенно.
Попробовал сделать так:
TRANSFORM CInt(MAX(IIF(DateDiff("d",DateSerial(Year([tblOutEx.fldOutDate]),1,1),[tblOutEx.fldOutDate],2)=[tblDay.fldDay],IIF(InStr([tblOutEx.fldOut],"200/")>0,Replace([tblOutEx.fldOut],"200/","")),0))) AS Номер
SELECT tblDay.fldDay AS День
FROM tblDay, tblOutEx
GROUP BY tblDay.fldDay
ORDER BY tblDay.fldDay
PIVOT Year([tblOutEx.fldOutDate]) In (2008,2009,2010,2011,2012,2013,2014,2015,2016);

Но теперь пустые места заполнены нулями, что не очень хорошо.
Вопрос наверняка глупый, но кто-нибудь может подсказать, можно ли сделать так, чтобы вместо нулей опять появились пустые строки? Или в поле могут быть значения только одного типа?
8 фев 19, 18:07    [21804736]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить