连接两个表,其中一个表包含多行,这些行引用另一个表PSQL中的一行

时间:2018-01-11 12:17:29

标签: sql oracle join pivot

所以我有两个看起来像这样的表:

nalog

prod_num
id

qa_stavka_kontrola

status
id_nalog
id
redak --question id

第二个表用于存储关于第一个表中包含的书籍的是或否答案(在列状态(布尔值)中)。第二个表的多行指的是第一个表中的一行。我想做一个看起来像这样的报告:

|prod_num | question 1 | question 2 | question 3 | 
|52       |     1      |     0      |     1      |
|53       |     0      |     1      |     1      |

这是我的查询,但速度非常慢:

select nalog.prod_num
      , r1.status as question1
      , r2.status as question2
      , r3.status as question3
from nalog
     left join qa_stavka_kontrola as r1 
     on nalog.id=r1.id_nalog and r1.redak=1 and (r1.status=1 or r1.status=0)
     left join qa_stavka_kontrola as r2 
     on nalog.id=r2.id_nalog and r2.redak=2 and (r2.status=1 or r2.status=0)
     left join qa_stavka_kontrola as r3 
     on nalog.id=r3.id_nalog and r3.redak=3  and (r3.status=1 or3.status=0)
where nalog.date BETWEEN '2017-09-01' and '2018-01-11'
group by nalog.prod_num, r1.status, r2.status, r3.status

1 个答案:

答案 0 :(得分:0)

我可能会离开,但您可以尝试使用PIVOT,查看文档以获取更多信息。

with something as
(select t1.prod_num, t2.redak 
from nalog t1
left outer join qa_stavka_kontrola t2
on t1.id=t2.id_nalog
where t2.status in (0,1)
and t1.date BETWEEN '2017-09-01' and '2018-01-11' -- is there a date column?
)
select *
from something
pivot (count(redak) for redak  in (1 as question_1, 2 as question_2, 3 as question_3));