powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите с запросом
8 сообщений из 8, страница 1 из 1
Помогите с запросом
    #35242439
Antoxa1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблицы 't1' типа:

id_org | date_opl | summa
-----------------------------------
_1___| 01.04.08 | 1000
_1___| 20.04.08 | 7000
_1___| 05.03.08 | 2000
_2___| 10.06.08 | 5000
_2___| 15.04.08 | 4000
_3___| 01.05.08 | 3000

и t2
id_org, name - список организаций

надо получить следующее:

id_org | 03.2008 | 04.2008 | 05.2008 | 06.2008 |
--------------------------------------------------------------------
__1___|_ 2000__|_ 8000__|_________|_______
__2___|________|_4000__|_________|_5000__
__3___|________|_______|_3000 ___|________

Единственное решение которое мне приходит в голову это Left Join t1 к t2.id_org для каждого месяца
Может можно как то более грамотно это дело оптяпать?

Прошу прощения за "художества"... Просто иначе тест криво отображается
...
Рейтинг: 0 / 0
Помогите с запросом
    #35242661
бухарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно через хп с динамическим скл, например


Код: 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.
32.
33.
CREATE OR REPLACE FUNCTION rep_get_menu()
  RETURNS refcursor AS
$BODY$
DECLARE
   rc           REFCURSOR;
   v_menu2      RECORD;
   ret          VARCHAR:='';
   levels       INTEGER;
   i            INTEGER:= 1 ;
   v_select     VARCHAR:='';
   v_from       VARCHAR:='';
BEGIN
   SELECT Max(rep_get_menu_level(menu_pk))
   INTO   levels
   FROM   rep_menu;
   WHILE i<=levels
     LOOP
       v_select:=v_select||',r'||i||'.menu_name';
       IF i<> 1 
          THEN v_from  :=v_from||' LEFT JOIN rep_menu r'||i
               ||' ON r'||i- 1 ||'.menu_pk = r'||i||'.parent_menu_fk ';
          ELSE
              v_from  :='rep_menu r'||i;
       END IF;
       i:=i+ 1 ;
     END LOOP;
      v_select:=Ltrim(v_select,',');
      v_from  :=Ltrim(v_from,'LEFT JOIN');
  -- OPEN rc FOR EXECUTE
   OPEN rc FOR EXECUTE 'SELECT '||v_select||' FROM '||v_from||' WHERE r1.parent_menu_fk IS NULL  ';
   RETURN rc; --Ok.
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
...
Рейтинг: 0 / 0
Помогите с запросом
    #35242682
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите с запросом
    #35242772
бухарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat http://sql.ru/forum/actualthread.aspx?tid=509898

всёравно каждый раз руками работать придётся
...
Рейтинг: 0 / 0
Помогите с запросом
    #35243005
бухарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вобщем вот

Код: 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.
CREATE OR REPLACE FUNCTION get_pivot()
  RETURNS refcursor AS
$BODY$
DECLARE
   rc           REFCURSOR;
   date_list    RECORD;
   v_top_select   VARCHAR:='SELECT id_org';
   v_select     VARCHAR:='SELECT id_org';
BEGIN
   FOR date_list IN (SELECT distinct date_opl
		     FROM   t1
                     )
     LOOP
     v_top_select := v_top_select||',Sum("'||date_list.date_opl||'") AS "'||date_list.date_opl||'" ';
     v_select := v_select||',case when date_opl = '''||date_list.date_opl||''' 
				     then summa 
				     else null 
				end AS "'||date_list.date_opl||'" ';
     END LOOP;
     v_top_select := v_top_select||' FROM ( ';
     v_select := v_select||' FROM t1 )data GROUP BY id_org ORDER BY id_org ASC';
     v_select := v_top_select||v_select;
  --RAISE EXCEPTION 'Resulting SQL: %',v_select;
   OPEN rc FOR EXECUTE v_select;
   RETURN rc; 
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

Код: plaintext
1.
2.
begin;
select get_pivot();
fetch all in "<unnamed portal 3>";
...
Рейтинг: 0 / 0
Помогите с запросом
    #35243023
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в консоли слабо было выполнить и запостить только консольный вывод? )
...
Рейтинг: 0 / 0
Помогите с запросом
    #35243098
бухарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
st_sergа в консоли слабо было выполнить и запостить только консольный вывод? )

Nobody's Perfect
...
Рейтинг: 0 / 0
Помогите с запросом
    #35243896
Antoxa1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем огромное
решил задачу
по ссылке LeXa NalBat... там еще на одну ссылку
/topic/190031

бухарю :-) отдельное спасибо
не у каждого возникнет желание так выкладываться
Попробую твой вариант, в общем что быстрее отработает, там и счастье
Еще раз спасибо
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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