Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Помогите с выборкой из базы. / 25 сообщений из 41, страница 1 из 2
28.01.2009, 09:31
    #35781700
Khod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
Есть 5 SQL-запросов, выводимых результаты:

SQL1: Select cod1, sum1;
SQL2: Select cod2, sum2;
SQL3: Select cod3, sum3;
SQL4: Select cod4, sum4;
SQL5: Select cod5, sum5.

cod1 - cod5 может принимать значения от 1101 до 1121.
Но поля могут быть и пустыми. А то и выполнение запроса может дать 0 строк.

Помогите составить запрос, выводящий таблицу вида:

cod, sum1, sum2, sum3, sum4, sum5.
1101
....
1121

Это нужно для работы, а не для баловства.
...
Рейтинг: 0 / 0
28.01.2009, 09:50
    #35781760
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
Не понятно.
В смысле есть таблица
работник месяц суммавася янв 10вася фев 10вася март 10петя янв 10петя фев 10

надо получить
работник янв февр мартвася 10 10 10петя 10 10 0
...
Рейтинг: 0 / 0
28.01.2009, 10:10
    #35781812
Khod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
Типа:

SQL1:
domain (count)

1101 61
1102 18
1103 24
1104 12
1105 45
1106 278
1107 61
1108 134
1109 33
1110 39
1111 2
1112 13
1113 7
1114 28
1115 28
1116 7
1117 17
1118 19
1119 28
1120 9
1121 8

SQL2:
domain (count)

1101 24
1102 16
1104 17
1105 31
1106 36
1107 7
1108 11
1109 8
1110 25
1111 20
1112 16
1113 8
1114 18
1115 18
1116 11
1117 10
1118 17
1120 8


SQL3:
domain (count)

1101 1
1102 1
1103 5
1104 7
1105 1
1106 34
1107 11
1108 3
1112 4
1114 1
1118 1
1119 2
1120 3
1121 3

SQL4:
domain (count)

SQL5:
domain (count)

Надо:
domain (count1) (count2) (count3) (count4) (count5)

1101 61 24 1 0 0
1102 18 16 1 0 0
1103 24 0 5 0 0
1104 12 17 7 0 0
1105 45 31 1 0 0
1106 278 36 34 0 0
1107 61 7 11 0 0
1108 134 11 3 0 0
1109 33 8 0 0 0
1110 39 25 0 0 0
1111 2 20 0 0 0
1112 13 16 4 0 0
1113 7 8 0 0 0
1114 28 18 1 0 0
1115 28 18 0 0 0
1116 7 11 0 0 0
1117 17 10 0 0 0
1118 19 17 1 0 0
1119 28 0 2 0 0
1120 9 8 3 0 0
1121 8 0 3 0 0
...
Рейтинг: 0 / 0
28.01.2009, 10:20
    #35781841
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
версия информикса какая? 1101- 1121 жестко заданы?
...
Рейтинг: 0 / 0
28.01.2009, 10:23
    #35781850
Khod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
Журавлев Денисверсия информикса какая? 1101- 1121 жестко заданы?

Информикс 9.30.
1101-1121 заданы жёстко.
Но, в зависимости от выборки, могут быть пустые строки, как отработка 4 и 5 запроса.
И могут быть пустые строки во всех таблицах.
А надо получить полноценную таблицу, где вместо отсутствующих полей будут 0
...
Рейтинг: 0 / 0
28.01.2009, 10:28
    #35781861
ak-47
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
1. Выбрать 1101 - 1121 от туда где они точно есть всегда.
2. left join для пяти запросов с данными
3. nvl(value, 0) для преобразования null в 0
...
Рейтинг: 0 / 0
28.01.2009, 10:30
    #35781869
ak-47
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
вообще описывай структуру данных и показывай какие запросы делаешь.
...
Рейтинг: 0 / 0
28.01.2009, 10:41
    #35781919
Khod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
Запросы, в результате которых, появляются числовые поля: код и счётчик.
Если я сделаю запрос SQL0, который выведет поле с номером домена, как мне двигаться дальше?

То есть результат выполнения SQL0^

domain:
1101
...
1121
...
Рейтинг: 0 / 0
28.01.2009, 10:49
    #35781953
informixxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
автор1. Выбрать 1101 - 1121 от туда где они точно есть всегда...
или временные таблитц еще есть
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
17.08.2010, 17:36
    #36796185
Khod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
Есть таблица Т1(дата1, дата2).
Нужно выбрать такие значения, когда дата2 больше дата1 на 2 месяца.
...
Рейтинг: 0 / 0
17.08.2010, 17:42
    #36796201
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
KhodЕсть таблица Т1(дата1, дата2).
Нужно выбрать такие значения, когда дата2 больше дата1 на 2 месяца.
select *
from Т1
where дата2 > дата1 +2 UNITS month
...
Рейтинг: 0 / 0
18.08.2010, 10:43
    #36797174
Khod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
select *
from Т1
where дата2 > дата1 +55 UNITS year

Выдаёт ошибку -1267 The result of a datetime computation is out of range.
Дело в том, что 29 февраля высокосного года переходит в 29 февраля невысокосного года и возникает ошибка.

Как изменить запрос, чтобы ошибка исчезла?
...
Рейтинг: 0 / 0
18.08.2010, 12:03
    #36797432
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
...
Рейтинг: 0 / 0
20.08.2010, 15:56
    #36803192
Khod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
Информикс 9.30
Делаю:
select *
from Т1
where ADD_MONTHS(дата1, 1) >= дата2)

Пишет 674 Routine ADD_MONTHS cannot be resolved.
...
Рейтинг: 0 / 0
20.08.2010, 16:44
    #36803379
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
KhodИнформикс 9.30
...
Пишет 674 Routine ADD_MONTHS cannot be resolved.
В этой версии такой функции еще нет
...
Рейтинг: 0 / 0
23.08.2010, 10:32
    #36805651
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
KhodИнформикс 9.30
тогда вручную запрограммируйте на spl, 1 строка isleapyear и ~30 строк addmonths
...
Рейтинг: 0 / 0
25.08.2010, 15:17
    #36810780
Khod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
С 1901 по 2099 года достточно 7 вариантов.
...
Рейтинг: 0 / 0
25.08.2010, 15:59
    #36810960
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
...
Рейтинг: 0 / 0
30.08.2010, 16:35
    #36819522
Khod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
Использую стандарты дат для России и Украины (дней 29 в феврале).
Ну, и учитываю, что 2000 год - высокосный (хотя не всегда это работает для столетий):

Код: plaintext
1.
2.
3.
4.
5.
6.
 and ((day(lpw.datedismissal) <>  31 ) and (month (lpw.datedismissal) <>  1 ) and (lpw.datedismissal +  1  UNITS month >= pc.datestatus) 
 or (day(lpw.datedismissal) =  31 ) and (month (lpw.datedismissal) in ( 7 ,  12 )) and (lpw.datedismissal +  1  UNITS month >= pc.datestatus) 
 or (day(lpw.datedismissal) =  31 ) and (month (lpw.datedismissal) in ( 3 ,  5 ,  8 ,  10 )) and ((lpw.datedismissal +  1 )+  1  UNITS month > pc.datestatus)
 or (day(lpw.datedismissal) <  29 ) and (month (lpw.datedismissal) =  1 ) and (lpw.datedismissal +  1  UNITS month >= pc.datestatus)
 or (day(lpw.datedismissal) >  29 ) and (month (lpw.datedismissal) =  1 ) and (MDY( 3 ,  1 , YEAR(lpw.datedismissal)) > pc.datestatus) 
 or (day(lpw.datedismissal) =  29 ) and (month (lpw.datedismissal) =  1 ) and (mod (YEAR(lpw.datedismissal),  4 ) =  0 ) and (lpw.datedismissal +  1  UNITS month >= pc.datestatus)
 or (day(lpw.datedismissal) =  29 ) and (month (lpw.datedismissal) =  1 ) and (mod (YEAR(lpw.datedismissal),  4 ) >  0 ) and (MDY( 3 ,  1 , YEAR(lpw.datedismissal)) > pc.datestatus))
...
Рейтинг: 0 / 0
30.08.2010, 16:39
    #36819534
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
o my lord, make me unsee it
...
Рейтинг: 0 / 0
30.08.2010, 17:27
    #36819663
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
не проверял:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
CREATE PROCEDURE isleapyear(y int)
RETURNING boolean;
define r boolean;
if (mod(y ,  4 )= 0  and mod(y ,  100 ) !=  0  or mod(y ,  400 ) =  0 ) then 
  return 't';
else return 'f';
end if;
END PROCEDURE;


CREATE PROCEDURE myaddmonth(dt date, inc int) 
RETURNING date;
define d,m,y int;
let d = day(dt);
let m = mod(month(dt)- 1  + inc, 12 )+ 1 ;
let y = year(dt)+trunc(inc/ 12 );

if (m in ( 4  , 6 ,  9 ,  11 ) and d >  30 ) then
 let d =  30 ;
end if;

if (m =  2  and d >  28 ) then
   if isleapyear(y) then 
     let d =  29 ;
   else 
     let d =  28 ;
   end if;
end if;

 return mdy(m,d,y);
END PROCEDURE;


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
>  select myaddmonth(to_date('30.08.2010','%d.%m.%Y'),1) from table(set{1});

09/30/2010

>  select myaddmonth(to_date('31.08.2010','%d.%m.%Y'),1) from table(set{1});

09/30/2010

>  select myaddmonth(to_date('31.08.2010','%d.%m.%Y'),-6) from table(set{1});

02/28/2010
...
Рейтинг: 0 / 0
31.08.2010, 10:46
    #36820508
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
таки скосячил:
Код: plaintext
let y = year(dt)+trunc((month(dt)- 1  + inc) / 12 );
...
Рейтинг: 0 / 0
01.12.2010, 11:53
    #36988226
Khod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
Нужно сделать выборку^

Select a1, a2, a3, a4
Union
Select a1, a2, a3

Поля а4 нет. Как сделать так, чтобы запрос работал?
...
Рейтинг: 0 / 0
01.12.2010, 12:14
    #36988306
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
KhodНужно сделать выборку^

Select a1, a2, a3, a4
Union
Select a1, a2, a3

Поля а4 нет. Как сделать так, чтобы запрос работал?

Select a1, a2, a3, a4
Union
Select a1, a2, a3, decode(1,2,3)
...
Рейтинг: 0 / 0
01.12.2010, 15:00
    #36989019
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой из базы.
Журавлев ДенисKhodНужно сделать выборку^

Select a1, a2, a3, a4
Union
Select a1, a2, a3

Поля а4 нет. Как сделать так, чтобы запрос работал?

Select a1, a2, a3, a4
Union
Select a1, a2, a3, decode(1,2,3)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Select a1, a2, a3, a4
Union
Select a1, a2, a3, <expression>


Select a1, a2, a3, a4
Union
Select a1, a2, a3, <expression> as a4

Select a1, a2, a3, a4
Union
Select a1, a2, a3, null as a4

В общем, as a4 - для красоты, выражение <expression> зависит от того что вы хотите увидеть в поле для результирующих записей, полученных из второй select-части union-запроса
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Помогите с выборкой из базы. / 25 сообщений из 41, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]