powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Использование crosstab функции
11 сообщений из 11, страница 1 из 1
Использование crosstab функции
    #38351868
HasT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется таблица вида:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 rowid     attribute   
----------+---------+
  test1      att1
  test1      att8
  test1      att3
  test1      att4
  test2      att5
  test2      att6
  test2      att2
  test2      att8


Как из данной таблицы получить таблицу в виде:
Код: sql
1.
2.
3.
4.
 rowid     attribute1  attribute1  attribute1  attribute1   
----------+-----------+-----------+-----------+-----------+
  test1         att1	   att8      att3        att4
  test2         att5	   att6      att2        att8



Как я понял, делается это через функцию crosstab, но не могу составить запрос... Хелп

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE ct(gid SERIAL, rowid TEXT, attribute TEXT);
INSERT INTO ct(rowid, attribute) VALUES('test1','att1');
INSERT INTO ct(rowid, attribute) VALUES('test1','att8');
INSERT INTO ct(rowid, attribute) VALUES('test1','att3');
INSERT INTO ct(rowid, attribute) VALUES('test1','att4');
INSERT INTO ct(rowid, attribute) VALUES('test2','att5');
INSERT INTO ct(rowid, attribute) VALUES('test2','att6');
INSERT INTO ct(rowid, attribute) VALUES('test2','att2');
INSERT INTO ct(rowid, attribute) VALUES('test2','att8');
...
Рейтинг: 0 / 0
Использование crosstab функции
    #38351877
HasT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запрос
Код: sql
1.
2.
3.
SELECT rowid, array_to_string(array_agg(attribute), ',')
FROM ct
GROUP BY rowid;


но он возвращает результат в виде (значения в attribute через запятую; необходимо каждое значение - в колонке):
Код: xml
1.
2.
3.
rowid      attribute
"test1";"att1,att8,att3,att4"
"test2";"att5,att6,att2,att8"
...
Рейтинг: 0 / 0
Использование crosstab функции
    #38352811
HasT,

так подойдет?

Код: plsql
1.
2.
3.
select *  from crosstab('SELECT rowid::text,attribute,attribute FROM ct',
				'SELECT DISTINCT attribute FROM ct ORDER BY attribute')
			as (rowid text,att1 text,att2 text,att3 text,att4 text,att5 text,att6 text,att8 text);



Запрос собрал так:
Код: plsql
1.
2.
3.
SELECT 'select *  from crosstab(''SELECT rowid::text,attribute,attribute FROM ct'',
				''SELECT DISTINCT attribute FROM ct ORDER BY attribute'')
			as ('||(SELECT 'rowid text,'||array_to_string(array_agg(a),',') FROM (SELECT DISTINCT attribute||' text' as a FROM ct ORDER BY 1)adv)||');' ;
...
Рейтинг: 0 / 0
Использование crosstab функции
    #38365861
HasT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей СветлицкийHasT,

так подойдет?

Код: plsql
1.
2.
3.
select *  from crosstab('SELECT rowid::text,attribute,attribute FROM ct',
				'SELECT DISTINCT attribute FROM ct ORDER BY attribute')
			as (rowid text,att1 text,att2 text,att3 text,att4 text,att5 text,att6 text,att8 text);



Запрос собрал так:
Код: plsql
1.
2.
3.
SELECT 'select *  from crosstab(''SELECT rowid::text,attribute,attribute FROM ct'',
				''SELECT DISTINCT attribute FROM ct ORDER BY attribute'')
			as ('||(SELECT 'rowid text,'||array_to_string(array_agg(a),',') FROM (SELECT DISTINCT attribute||' text' as a FROM ct ORDER BY 1)adv)||');' ;


Да. Спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Использование crosstab функции
    #38825690
DoomUnit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select *  from crosstab('SELECT 
                          "FMineObj_ID",
                        	"F_Value_Q",
                       	 "F_Value_Q"
                      FROM  "SC_Wonder"."TMining"
                         where "FMineObj_ID" = 1 ',
				'SELECT DISTINCT "F_Value_Q" FROM "SC_Wonder"."TMining" ORDER BY "F_Value_Q"')
			as (rowid text,att1 text,att2 text);



ERROR: function crosstab(unknown, unknown) does not exist
LINE 1: select * from crosstab('SELECT
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.

почему?
...
Рейтинг: 0 / 0
Использование crosstab функции
    #38825697
DoomUnit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
млин даж такой пример не работает
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TABLE ct(id SERIAL, rowid TEXT, attribute TEXT, value TEXT);
INSERT INTO ct(rowid, attribute, value) VALUES('test1','att1','val1');
INSERT INTO ct(rowid, attribute, value) VALUES('test1','att2','val2');
INSERT INTO ct(rowid, attribute, value) VALUES('test1','att3','val3');
INSERT INTO ct(rowid, attribute, value) VALUES('test1','att4','val4');
INSERT INTO ct(rowid, attribute, value) VALUES('test2','att1','val5');
INSERT INTO ct(rowid, attribute, value) VALUES('test2','att2','val6');
INSERT INTO ct(rowid, attribute, value) VALUES('test2','att3','val7');
INSERT INTO ct(rowid, attribute, value) VALUES('test2','att4','val8');

SELECT *
FROM crosstab(
  'select rowid, attribute, value
   from ct
   where attribute = ''att2'' or attribute = ''att3''
   order by 1,2')
AS ct(row_name text, category_1 text, category_2 text, category_3 text);
...
Рейтинг: 0 / 0
Использование crosstab функции
    #38825850
/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DoomUnit,

Вы установили EXTENSION , в котором эта функция объявляется?
...
Рейтинг: 0 / 0
Использование crosstab функции
    #38826022
DoomUnit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет. а как это делается?
...
Рейтинг: 0 / 0
Использование crosstab функции
    #38826031
DoomUnit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
CREATE EXTENSION tablefunc;
...
Рейтинг: 0 / 0
Использование crosstab функции
    #38826078
DoomUnit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select *  from crosstab('SELECT 
                          "FMineObj_ID",
                          "F_Value_Q",
                          "F_Value_Fe"
                           FROM  "SC_Wonder"."TMining"
                                   where "FMineObj_ID" = ''1'' ',
                          'SELECT DISTINCT "F_Value_Q" FROM "SC_Wonder"."TMining"
                          where "FMineObj_ID" = 1
                           ORDER BY "F_Value_Q"')
			as (rowid text,att1 text,att2 text);


так заработало
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Использование crosstab функции
    #39357366
maksim565
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помоги правильно оформить
select *

crosstab('b.sbill_businessday,

pt.ptypelong as pform,


sum(c.scont_taxbase )/ 100.0 as vamount
from sale_bill_t0 b
inner join sale_content_t0 c on scont_bill = sbill_id
inner join sale_tender_t0 st on st.sten_bill=b.sbill_id
inner join v2_ptypesp0 pt on st.sten_paymentform=pt.ptypeid
where c.scont_qtty>0 and b.sbill_overring=0 and
(date (b.sbill_businessday) between '2016-11-25' and '2016-11-28')

group by sten_paymentform,pt.ptypelong,b.sbill_businessday

order by b.sbill_businessday ') AS ct(b.sbill_businessday date, att1 numeric,att2 numeric,att3 numeric,att4 numeric,att5 numeric)




вот как выдает запрос без cross




sbill_businessday pform vamount
"2016-11-25" "AZN ";1399.0000000000000000
"2016-11-25" "Depozitnaya karta ";87.0000000000000000
"2016-11-26" "AZN ";1787.0000000000000000
"2016-11-26" "Depozitnaya karta ";118.0000000000000000
"2016-11-26" "Pulsuz ";120.0000000000000000
"2016-11-27" "AZN ";1326.5000000000000000
"2016-11-27" "Depozitnaya karta ";30.0000000000000000
"2016-11-28" "AZN ";1909.0000000000000000
"2016-11-28" "Безнал ";8.0000000000000000
"2016-11-28" "Depozitnaya karta ";96.0000000000000000
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Использование crosstab функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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