繁体   English   中英

MySQL在有条件的列中获取价值

[英]MySQL getting value in same column as where conditional

需要一些帮助来创建可以使我获得所需结果的查询。

我从mysql数据库的2个表中提取信息。

TABLE 1 - tblclients
ID    firstname    lastname
1     Bob          K
2     Mary         J
3     Tod          M

tblcustomfieldsvalues.RelId = tblclients.ID

TABLE 2 - tblcustomfieldsvalues
ID    fieldid     RelId     value
1     15           3        3500
2     15           2        1500
3     17           3        Calp
4     17           2        Amazon
5     17           2        Calp

TABLE 3 - tblcustomfields (JUST FOR REFERENCE)
ID    FieldID     name
1     15          Purchase Amount        
2     17          Site      

所需结果:

我想在第4列(FieldID = 15)中显示购买金额,其中FieldID = 17和value ='calp'

ID    FirstName    LastName     Value
1     Tod           M           3500
2     Mary          J           1500

当前查询:

SELECT tblclients.id, tblclients.firstname, tblclients.lastname, tblcustomfieldsvalues.value FROM tblclients INNER JOIN tblcustomfieldsvalues ON tblclients.id = tblcustomfieldsvalues.relid WHERE tblcustomfieldsvalues.fieldid = 17 AND tblcustomfieldsvalues.value = 'Calp'

当前结果:

ID    FirstName    LastName     Value
1     Tod           M           Calp
2     Mary          J           Calp

我不清楚您期望得到什么结果...首先,我确定您编写了fieldid = 17而不是47。如果是这样,您的结果是正常的。 您要求输入fieldid 17,并且还取值为“ Calp”。 您是否想要f​​ieldid 15? 那些是有价格的...或者也许

SELECT tblclients.id, tblclients.firstname, tblclients.lastname, tblcustomfieldsvalues.value FROM tblclients INNER JOIN tblcustomfieldsvalues ON tblclients.id = tblcustomfieldsvalues.relid WHERE tblcustomfieldsvalues.fieldid in (15,17) OR tblcustomfieldsvalues.value = 'Calp'

您的查询:

SELECT tblclients.id, tblclients.firstname, tblclients.lastname, tblcustomfieldsvalues.value FROM tblclients INNER JOIN tblcustomfieldsvalues ON tblclients.id = tblcustomfieldsvalues.relid WHERE tblcustomfieldsvalues.fieldid = 47 AND tblcustomfieldsvalues.value = 'Calp'

一种解决方法是条件聚合:

select c.*, value15 as value
from tblclients c join
     (select cfv.relid,
             max(case when fieldid = 15 then value end) as value15,
             sum(case when fieldid = 17 and value = 'Calp' then 1 else 0 end) as cnt17
      from tblcustomfieldsvalues cfv
      group by cfv.relid
     ) cv
where cnt17 > 0;

您也可以通过联接执行此操作。 但是,您需要为每个字段的每个单独的联接:

SELECT c.id, c.firstname, c.lastname, cfv15.value
FROM tblclients c INNER JOIN
     tblcustomfieldsvalues cfv17
     ON c.id = cfv17.relid AND
        cvf17.fieldid = 17 AND cfv17.value = 'Calp' INNER JOIN
     tblcustomfieldsvalues cfv15
     ON c.id = cfv15.relid AND
        cvf15.fieldid = 15;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM