Вопрос № 70448: Здравствуйте, подскажите кто сможет. Есть таблицы Список и Данные. В таблице Данные поля Код, Год, I кв, II кв, III кв, IV кв. Необходимо выбрать данные за кокой-то период (например с IV кв 2000 г по III кв 2002 г). Кто подскажет как это реализовать....
Вопрос № 70.448
Здравствуйте, подскажите кто сможет. Есть таблицы Список и Данные. В таблице Данные поля Код, Год, I кв, II кв, III кв, IV кв. Необходимо выбрать данные за кокой-то период (например с IV кв 2000 г по III кв 2002 г). Кто подскажет как это реализовать.
Заранее благодарю.
Отправлен: 11.01.2007, 11:41
Вопрос задала: КЕВ (статус: Посетитель)
Всего ответов: 5 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: PaVeL_Ekt
Здравствуйте, КЕВ!
Надо преобразовать 4 кв. 2000 г. в формат даты (01.09.2000)
3 кв. 2002 года соответственно (01.06.2002)
по функциям посмотрю и напишу на минифорум
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: Студент)
Ответ отправлен: 11.01.2007, 11:57
Отвечает: Архангельский Андрей Германович
Здравствуйте, КЕВ!
1) Какая-то странная структура - хотелось бы подробное описание таблицы
2) Выборка в диапазоне выполняется оператором :
where Fild1 BETWEEN data1 and data2
3) Для выборки из даты квартала существуют различные функции зависящие от реализации СУБД. НАпример, в Firebird это функция f_Quarter, которая выдает номер квартала в году
--------- Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Отвечает: Tek
Здравствуйте, КЕВ!
Если я правильно понял объяснения, то - суперская компоновка таблицы. Тот гений, что ее разрабатывал, что-нибудь вааще о нормализации хотя бы слышал. Но это эмоции.
Для последующего использования например в агрегатных функциях как вариант можно использовать union по каждому кварталу:
select year, I from t where year=2001 or year=2002 UNION ALL
select year, II from t where year=2001 or year=2002 UNION ALL
select year, III from t where year=2001 or year=2002 UNION ALL
select year, IV from t where year=2000 or year=2001
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 6-ой класс)
Ответ отправлен: 11.01.2007, 12:27
Отвечает: Grigory
Здравствуйте, КЕВ!
Для реализации такого поиска Вам нужна немного другая структура таблицы Данные:
Код
Год
Квартал
Таким образом, для того, чтобы выбрать данные за определенный период, Вам надо будет указать Год и Квартал начала периода и конца периода, за который Вы хотите найти данные. Тогда запрос будет примерно такой:
SELECT * FROM Данные WHERE Год = 2005 AND Квартал between 2 and 4 - этот запрос вам вернет данные о периоде начиная с 2 квартала 2005 года и кончая 4 кварталом 2005 года.
Ответ отправил: Grigory (статус: 10-ый класс)
Ответ отправлен: 11.01.2007, 17:48
Отвечает: Игорь Елизаров
Здравствуйте, КЕВ!
у нас в системе, например, реализовано следующим образом.
отчетные периоды нумеруются код =год + номер отчетного периода, получается обычное целое число,а дальше уже обычный отбор
select * from table where period >=20004 and period <= 20023
На самом деле удобно еще хранить дату начала и окончания периода.
Это позволит сразу определить, к какому отчетному периоду относится та или иная дата.
С уважением, Игорь
Ответ отправил: Игорь Елизаров (статус: 9-ый класс)
Ответ отправлен: 11.01.2007, 23:07