2017-04-10 42 views
-1

我使用Presto分贝创建SQL查询动态二进制列

我有两个表,一个是这样的:

表1:

item count 
p1  20 
p2  10 
p3   5 
p4   4 
p5   2 

和表2:

person  lic 
c1    p2 
c1    p1 
c2    p3 
c2    p4 
c2    p2 
c3    p1 
c4    p2 

我想返回一张如下所示的表格:

person  p1 p2 p3 p4 p5 

c1   1  1  0 0 0 
c2   0  1  1 1 0 
c3   1  0  0 0 0 
c4   0  1  0 0 0 
c5   0  0  0 0 0 

它看起来像一个支点会做了,但是我不知道如何解释在列缺失值,并让他们在决赛桌为“0”

+0

你使用'count()'?如果是这样,它将已经这样做... – JohnHC

+0

@JohnHC我使用计数在哪里? – dimebucker91

+0

这个问题中的“动态”和“二元”究竟在哪里? –

回答

1

的SQL查询的输出模式必须被修复。因此,如果您希望列p1出现在输出中,则必须在查询中明确列出。

我不知道table1如何与输出,但你可以做一个支点是这样的:

SELECT person 
, count_if(lic = 'p1') p1 
, count_if(lic = 'p2') p2 
... 
FROM table2 
GROUP BY person 

查询需要列出每个p列。根据您的应用程序,您可能能够以编程方式生成查询,方法是首先运行查询以获取p的唯一值。

+0

有没有办法做到这一点,而无需手动写出所有列?这正是我试图避免的 – dimebucker91

+0

表1存在,因为我需要表1中的所有行出现在决赛桌中,像c3这样的人没有p2行,但我仍然希望显示出来在最后一个表格中 – dimebucker91