PostgreSQL 9.3:交叉表查询

PostgreSQL 9.3:交叉表查询,postgresql,postgresql-9.3,crosstab,Postgresql,Postgresql 9.3,Crosstab,我有一个名为testing的表,它有四列,如下所示 create table testing ( cola varchar(10), colb varchar(10), colc varchar(10), cold varchar(10) ); 插入某些行: insert into testing values('A1','City1','X1','Z1'), ('A2','City2','X2','Z2'), ('A3','City3'

我有一个名为testing的表,它有四列,如下所示

create table testing
(
cola varchar(10),
colb varchar(10),
colc varchar(10),
cold varchar(10)
);
插入某些行:

insert into testing values('A1','City1','X1','Z1'),
              ('A2','City2','X2','Z2'),
              ('A3','City3','X3','Z3'),
              ('A4','City4','X4','Z4');
预期结果:我想显示如下所示的结果:

cola  City1  City2  City3  City4  colc  cold
--------------------------------------------
A1      1      0      0      0     X1    Z1
A2      0      1      0      0     X2    Z2
A3      0      0      1      0     X3    Z3
A4      0      0      0      1     X4    Z4           
我的尝试: 我已尝试使用以下脚本,但出现错误

select * from crosstab
(
'select cola,colb,count(colb),colc,cold from testing group by 1,2,4,5 order by 1,2,4,5',
'select distinct colb from testing'
)
as t
(
    cola varchar(10),City1 integer,City2 integer,City3 integer,City4 integer,colc varchar(10),cold varchar(10)
);  
错误详细信息:


也许这就是你想要的

select x1.*, x2.colc, x2.cold from crosstab
( $$select x1.cola, x2.colb,
     CASE WHEN x1.colb = x2.colb THEN 1 ELSE 0 END
    FROM testing x1 CROSS JOIN testing x2 
  $$
) AS x1( cola VARCHAR(10), City1 INT, City2 INT, City3 INT, City4 INT)
LEFT JOIN testing x2 ON x1.cola = x2.cola;
结果:

 cola | city1 | city2 | city3 | city4 | colc | cold 
------+-------+-------+-------+-------+------+------
 A1   |     1 |     0 |     0 |     0 | X1   | Z1
 A2   |     0 |     1 |     0 |     0 | X2   | Z2
 A3   |     0 |     0 |     1 |     0 | X3   | Z3
 A4   |     0 |     0 |     0 |     1 | X4   | Z4

A1和City1之间的关系是什么?@Kokizzu,这只是一个例子。我可以说A1将是产品代码,City1将是已售出的城市。如何获得不同的colb值和计数。如果cola中有相同的多个值。例如,如果我插入上述行2次,只需将crostab中的测试替换为SELECT cola,countcolb AS colb FROM testing我通常使用服务器端编程语言来完成此操作,因为查询不灵活,例如,当您添加更多City时。。或者有时候我会用程序生成sql,这样会更灵活。是的!确切地当城市的环境不是固定的,而是动态的时。它们可能会随着条目的更改而更改。我会在一小时后检查你的评论脚本。现在我正在使用智能手机,因此无法检查。您在服务器端使用什么编程语言?
 cola | city1 | city2 | city3 | city4 | colc | cold 
------+-------+-------+-------+-------+------+------
 A1   |     1 |     0 |     0 |     0 | X1   | Z1
 A2   |     0 |     1 |     0 |     0 | X2   | Z2
 A3   |     0 |     0 |     1 |     0 | X3   | Z3
 A4   |     0 |     0 |     0 |     1 | X4   | Z4