|
|
|
| Регистрационный номер: Дата составления:
01921 29.12.2007 12:17:38
01921 24.12.2007 15:04:07
01921 24.12.2007 15:00:49
01921 24.12.2007 14:57:04
01921 29.01.2008 10:16:07
01894 28.01.2008 9:16:14
01894 09.01.2008 12:17:21
01894 28.01.2008 9:17:02
01894 17.12.2007 13:44:53
01894 17.12.2007 13:45:16
01894 17.12.2007 12:14:19
01888 15.12.2007 15:44:29
01888 15.12.2007 15:43:54
01888 15.12.2007 15:43:33
01888 15.12.2007 15:39:40
01881 14.12.2007 14:14:03
01881 14.12.2007 14:20:04
01881 14.12.2007 14:19:33
01881 14.12.2007 14:19:16
В делах с номерами 01921 и 01894 используются документы с 2007 и 2008 годом, а в остальных только 2007 год. Что указать в запросе, чтобы выбрать все дела с двумя годами? | |
|
| |
|
|
|
| как то так:
SELECT q1.reg, Count(q1.y) AS [y1]
FROM
(SELECT [Регистрационный номер] as reg , Year([Дата составления]) AS y
FROM tbl
GROUP BY tbl.[Регистрационный номер], Year([Дата составления])) AS q1
GROUP BY q1.reg
HAVING (Count(q1.y)>1);
|
| |
|
| |
|
|
|
| Можешь пояснить на примере, что куда написать?
SELECT CAODealRegs.RegNumber, CAODocs.DocDate
FROM CAODealRegs LEFT JOIN CAODocs ON CAODealRegs.ID = CAODocs.DealReg
WHERE (((CAODealRegs.RegNumber)="01921" Or (CAODealRegs.RegNumber)="01894" Or (CAODealRegs.RegNumber)="01888" Or (CAODealRegs.RegNumber)="01881")); | |
|
| |
|
|
|
| какое отношение этот запрос имеет к поставленной задаче? | |
|
| |
|
|
|
| SELECT [Регистрационный номер], Min([Дата составления]), Max([Дата составления])
FROM Таблица
GROUP BY [Регистрационный номер]
HAVING (Min(Year([Дата составления]))<>Max(Year([Дата составления])));
или
HAVING (DateDiff('YYYY', Min([Дата составления]), Max([Дата составления]))<>0); | |
|
| |
|
|
|
|
| SELECT CAODealRegs.RegNumber, CAODocs.DocDate
FROM CAODealRegs LEFT JOIN CAODocs ON CAODealRegs.ID = CAODocs.DealReg
CAODealRegs.RegNumber - таблица из которой берется регистрационный номер,
CAODocs.DocDate - таблица из которой берется дата составления.
как должен выглядеть запрос, чтобы в итоге получить:
Регистрационный номер: Дата составления:
01921 29.12.2007 12:17:38
01921 24.12.2007 15:04:07
01921 24.12.2007 15:00:49
01921 24.12.2007 14:57:04
01921 29.01.2008 10:16:07
01894 28.01.2008 9:16:14
01894 09.01.2008 12:17:21
01894 28.01.2008 9:17:02
01894 17.12.2007 13:44:53
01894 17.12.2007 13:45:16
01894 17.12.2007 12:14:19 | |
|
| |
|
|
|
| если DealReg в таблице CAODocs это код из поля ID таблицы CAODealRegs, то встает еще один вопрос, Вы хотите получить все Записи из таблицы CAODealRegs, или только те у которых есть хотя бы одна соответствующая запись в таблице CAODocs?
Если все то ваш запрос правильный, если только те у которых есть хотя бы одна соответствующая запись в таблице CAODocs, то замените LEFT JOIN на INNER JOIN | |
|
| |
|
|
|
| Наверное я неправильно объясняю.
Есть запрос
SELECT CAODealRegs.RegNumber, CAODocs.DocDate
FROM CAODealRegs LEFT JOIN CAODocs ON CAODealRegs.ID = CAODocs.DealReg
который выдает следующее
Регистрационный номер: Дата составления:
01921 29.12.2007 12:17:38
01921 24.12.2007 15:04:07
01921 24.12.2007 15:00:49
01921 24.12.2007 14:57:04
01921 29.01.2008 10:16:07
01894 28.01.2008 9:16:14
01894 09.01.2008 12:17:21
01894 28.01.2008 9:17:02
01894 17.12.2007 13:44:53
01894 17.12.2007 13:45:16
01894 17.12.2007 12:14:19
01888 15.12.2007 15:44:29
01888 15.12.2007 15:43:54
01888 15.12.2007 15:43:33
01888 15.12.2007 15:39:40
01881 14.12.2007 14:14:03
01881 14.12.2007 14:20:04
01881 14.12.2007 14:19:33
01881 14.12.2007 14:19:16
Мне нужно чтобы выдавал номера дел у которых в дате составления присутствуют два и более года(на мое усмотрение):
Регистрационный номер: Дата составления:
01921 29.12.2007 12:17:38
01921 24.12.2007 15:04:07
01921 24.12.2007 15:00:49
01921 24.12.2007 14:57:04
01921 29.01.2008 10:16:07
01894 28.01.2008 9:16:14
01894 09.01.2008 12:17:21
01894 28.01.2008 9:17:02
01894 17.12.2007 13:44:53
01894 17.12.2007 13:45:16
01894 17.12.2007 12:14:19 | |
|
| |
|
|
|
| можно так:
SELECT tbl.[Регистрационный номер], tbl.[Дата составления]
FROM tbl
WHERE (tbl.[Регистрационный номер] In (SELECT q1.reg
FROM (SELECT [Регистрационный номер] as reg , Year([Дата составления]) AS y
FROM tbl
GROUP BY tbl.[Регистрационный номер], Year([Дата составления])) AS q1
GROUP BY q1.reg
HAVING Count(q1.y)>[Более лет]));
|
| |
|
| |
|
|
|
| Еще вариант:
SELECT CAODealRegs.RegNumber, CAODocs.DocDate
FROM CAODealRegs LEFT JOIN CAODocs ON CAODealRegs.ID = CAODocs.DealReg
WHERE EXISTS (SELECT * FROM CAODocs As tmp WHERE ((tmp.DealReg=CAODocs.DealReg)
AND (Abs(Year(CAODocs.DocDate)-Year(tmp.DocDate))>=1)); | |
|
| |
|
|
|
| В прикрепленном файле запрос. Попробую объяснить по другому, что мне нужно. Сейчас я делаю отчеты по документам с датой составления за 2009г. У дел начатых в 2009г. даты составления документов имеют 2009г, но есть дела начатые в 2008г., а оконченные в 2009г. (могут быть даже дела начатые в 2007г., а оконченные в 2009г.). Мне нужно выбрать дела с датой составления документов за 2009г, но при этом у дел за 2008г. должны показываться оба года. Простите, что файл такой большой, но убирать лишнее очень долго.
http://slil.ru/27521354 | |
|
| |
|
38 Кб. |
|
| Блин, 37МБ! Сделай копию, убери лишнию инфу, сожми в раре. Ибо сдохну от любопытства.
Вот накидал что получилось по форме и отчету. Без оформления. Отчет - регистрационный номер и год. В форме регистрационный номер и даты ведения. Попрет так? | |
|
| |
|
|
|
| К сожалению, не могу | |
|
| |
|
|
|
| Да бог с ним. По тому что дал отчет и форма подошли? Такое имел в виду или я опять что-то не так понял. | |
|
| |
|
|
|
| Если честно, я вообще не могу понят что ты сделал, но это точно не то, что мне нужно. | |
|
| |
|
|
|
| Мне нужно выбрать дела с датой составления документов за 2009г, но при этом у дел за 2008г. должны показываться оба года.
Так вроде указывается оба года в отчете, там где их оба. Или нужно только те, которые больше 2 лет ведуться? | |
|
| |
|
|
|
| Если ты действительно хочешь помоч, скачай пожалуйста файл. Я действительно очень сожалею о том, что он получился таким большим, но уменьшить не могу. Мне нужно получить результат в запросе, не в форме или отчете, а только в запросе. | |
|
| |
|
|
|
| Ладно. К вечеру будет скачан. К утру ответ.
PS Кажется дошло. В запросе должно быть типа так:
Регистрационный номер Дата
0111101 2008,2009
0111000 2007
0234900 2006,2007,2008,2009
03338282 2008,2009
В таком виде вывод? | |
|
| |
|
|
|
| Нет. Посмотри пожалуйста файл и напиши понятно или нет. Во второй таблице выделены дела, которых не должно быть в запросе, т.к. в этих делах нет 2009г.
http://slil.ru/27521851 | |
|
| |
|
|
|
| Теперь ясно. 2 поля. В одном регистрационные, в другом даты. Нужно вывести те регистрационные, в которые входит дата 2009. При этом показать все даты, которые входят кроме 2009 если они там есть. Так? Кажется определились. | |
|
| |
|
47 Кб. |
|
| Вот пока так. В поле формы вводишь год, регистрационные которого не надо выводить. Нажимая на кнопку выйдут все регстрационные, в которые введенный год не входит.
Импортируй в свою базу все запросы, переделай под свою таблицу. Скачать файл смогу только к вечеру. Если будет надо, то переведу сам под имя таблицы с ее полями. Главное это то или нет? | |
|
| |
|
55 Кб. |
|
| Первое была шутка от гоблина. С точностью до наоборот. Даю второй вариант - введи год для вывода всех регистрационных, в которых интересуемый год присутствует хотя бы один раз. Также выведены будут все остальные года данного регистрационного.
PS В запросе выводится №регистрационный и года в формате Год. Запрос групповой. | |
|
| |
|
|
|
| Спасибо за попытки помочь, но ты так и не понял, что мне нужно. | |
|
| |
|
|
|
| Погоди несколько минут - не убегай | |
|
| |
|
10 Кб. |
|
| Может так подойдет - то что (как мне кажется) Вам нужно во втором запросе.....
таблиц нет вообще (я убрал все данные для уменьшения объема файла).....
так что - то что я вам прислал нужно вставить в Копию вашей базы | |
|
| |
|
|
|
| Я прошу помочь сделать в запросе, а вы снова используете форму. Мне это не нужно. | |
|
| |
|
|
|
| Там форма случайно затесалась.......
весь процесс в запросе1 и запросе2 | |
|
| |
|
|
|
| Прикрепи "снимок" того, что ты получаешь применив свой запрос. | |
|
| |
|
|
|
| :-( Убил данные
смогу только часа через три....
файл на слил уже не существует | |
|
| |
|
|
|
| Ангел, причем тут форма? На форме есть кнопка, нажав которую выходит нужный тебе запрос. С помощью формы лишь гибкость отработана. В твоей почте весь файл со слил в котором 2 запроса. Запрос1 - для подготовки данных и Запрос 2 - тот что тебе нужен. В него входит запрос 1. Вводишь значение в форме "2009" и получаешь все регистрационные в которые входит 2009 год и остальные, если они есть в этих регистрационных.
Там получается более 10000 штук записей. Файл в раре получается 1,5 МБт потому и отослал на почтовый.
Если форма так достала, то в запросе 1 убери условие Forms!..., и введи 2009. Тогда запрос 2 будет работать только на этот год. Но условие легче и удобнее вводить с формы, нежели лазить в запрос. | |
|
| |
|
64 Кб. |
|
| Не, ангелочек. Добиваем с тобой до конца. Если нужны все регистрационные, в которые входит 2009 год, но при этом, если только один 2009, то такой регистрационный не нужен. Тогда это тоже решаемо, но уже не двумя запросами, а четырьмя. (в моем исполнении на скору руку) Запрос 4 - итоговый.
Запрос1 - Переводим длинный формат даты в простой год. Отбираем год 2009 с регистрационными.
Запрос2 - С помощью Запроса1 и таблицы выбираем из таблицы все инвентарные, в которые входит 2009 год и показываем на эти инвентарные 2009 и другие года, если они там есть. (Показываем все инвентарные со всеми их годами, в которые входит 2009 год)
Запрос3 - Группируем значения запрос2, выбираем из них только те значения регистрационных, которых больше одной записи. (Стало быть если запись только с одним 2009 годом, то ее не показываем.)
Запрос4 - С помощью запрос3 и запрос2 выводим итоговые значения. Все инвентарные, в которые входит 2009 год и другие. Те, что имеют один 2009 показаны не будут.
Ну уж если и это не то, тогда я пас.
PS: В кодах на VBA это можно было бы решить проще. Наверно. | |
|
| |