Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在重复语句中显示0?_Mysql_Sql - Fatal编程技术网

Mysql 如何在重复语句中显示0?

Mysql 如何在重复语句中显示0?,mysql,sql,Mysql,Sql,我试图显示所有策略业务单元,但仅在存在值时显示 我的桌子: |policies| |id| |client| |policy_business_unit_id| |cia_ensure_id| |state| 1 MATT 1 1 0 2 STEVE 1 1

我试图显示所有策略业务单元,但仅在存在值时显示

我的桌子:

|policies|
  |id|  |client|  |policy_business_unit_id|  |cia_ensure_id|   |state|       
   1      MATT                  1                   1             0
   2      STEVE                 1                   1             0
   3      BILL                  1                   2             0
   4      LARRY                 1                   2             1
   5      MATT                  1                   2             1
   6      STEVE                 2                   2             2
   7      BILL                  2                   2             2
   8      LARRY                 2                   2             1
   9      MATT                  2                   1             1

|policy_business_units|
   |id|   |name|  |comercial_area_id|
     1     LIFE         1 
     2     ROB          1 
     3     CAR          1 
     4     RARE         1 
     5     RARE2        1 

|comercial_areas|
   |id|   |name|
    1      MICROSOFT
    2      APPLE

|cia_ensures|
   |id|   |name|
    1      ORANGE
    2      BT
    3      ATT
    4      MOVISTAR
    5      SPRINT
我得到了这个结果,它还可以,但没有显示所有的政策和业务单位

 UNIT  V1  A1  N1   V2 A2  N2   V3  A3  N3   V4  A4  N4   V5  A5  N5
 LIFE  2   0   0    1   2  0    0   0   0     0   0   0   0    0   0
 ROB   0   1   0    0   1  2    0   0   0     0   0   0   0    0   0 
这是一个问题

我想展示一下:

 UNIT  V1  A1  N1   V2 A2  N2   V3  A3  N3   V4  A4  N4   V5  A5  N5
 LIFE  2   0   0    1   2  0    0   0   0     0   0   0   0    0   0
 ROB   0   1   0    0   1  2    0   0   0     0   0   0   0    0   0 
 RARE  0   0   0    0   0  0    0   0   0     0   0   0   0    0   0 
 RARE2 0   0   0    0   0  0    0   0   0     0   0   0   0    0   0 
有人能帮我吗


我将感谢所有帮助。

请检查以下更改,如果它对您有帮助,我没有执行它,只是在查询中做了一些更改,因此需要在您的末尾进行检查:

set @@local.group_concat_max_len=10000;
select distinct @sql := concat('SELECT pb.name as unit,',
group_concat(concat(
'SUM(CASE WHEN p.state =0 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS v',id,', 
 SUM(CASE WHEN p.state =1 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS a',id,', 
 SUM(CASE WHEN p.state =2 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS n',id)),
' 
FROM 
policy_business_units pb 
LEFT JOIN policies p 
ON pb.id = p.policy_business_unit_id
LEFT JOIN cia_ensures ce 
on ce.id = p.cia_ensure_id 
LEFT JOIN comercial_areas ca 
ON ca.id = pb.comercial_area_id
AND ca.id=1  
Group by pb.name;')
from cia_ensures
where id in(1,2,3,4,5,6,7,8,10);

prepare stmt from @sql;
execute stmt;

“pb.id=p.policy\u business\u unit\u id上的内部连接策略\u business\u units pb”只返回这两个表中的值。可能需要做一些左连接来代替?将第一个
内部连接策略\u business\u units
更改为
右连接策略\u business\u units
。除了@tomaspatircak已经说过的之外,您还需要将group by更改为
pb.name
,至于我之前的评论,谢谢您为我工作=),但是没有得分回答?可以?
set @@local.group_concat_max_len=10000;
select distinct @sql := concat('SELECT pb.name as unit,',
group_concat(concat(
'SUM(CASE WHEN p.state =0 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS v',id,', 
 SUM(CASE WHEN p.state =1 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS a',id,', 
 SUM(CASE WHEN p.state =2 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS n',id)),
' 
FROM 
policy_business_units pb 
LEFT JOIN policies p 
ON pb.id = p.policy_business_unit_id
LEFT JOIN cia_ensures ce 
on ce.id = p.cia_ensure_id 
LEFT JOIN comercial_areas ca 
ON ca.id = pb.comercial_area_id
AND ca.id=1  
Group by pb.name;')
from cia_ensures
where id in(1,2,3,4,5,6,7,8,10);

prepare stmt from @sql;
execute stmt;