我们有两张桌子:
客户:
select name, i_customer from Customers limit 5;
| Western Refinishers (Pty) Ltd | 2265 |
| Westonaria Motor Investments (Pty) Ltd | 1949 |
| Wild Break 1479 cc | 1225 |
| Workshop On Wheels (Pty) Ltd | 2582 |
| Wynberg Panelbeaters And Spray Painters | 2471 |
Custom_Field_Values:
select i_customer, i_custom_field, value
from Custom_Field_Values
where i_custom_field in (14,15,16,17,18) limit 5;
+------------+----------------+-------+
| i_customer | i_custom_field | value |
+------------+----------------+-------+
| 64 | 14 | 101 |
| 321 | 14 | 101 |
| 321 | 16 | 2233 |
| 1519 | 14 | 102 |
| 1529 | 14 | 102 |
+------------+----------------+-------+
同一客户可以在Custom_Field_Values表中拥有多条记录。例如,使用i_custom_field 14和16。
我需要检索一个报表,该报表仅返回i_custom_field编号为16,17,18的记录的所有客户唯一名称和Custom_Field_Values.values。
如果客户在(16,17,18)中没有i_custom_field的记录,只需用空字符串替换它的值。
答案 0 :(得分:0)
如果为同一客户找到了(16,17,18)中带有i_custom_field的多行,则该值将总计为输出值。
这是解决方案。
SELECT
c.name, COALESCE( SUM(v.value), '') value
FROM
Customers c LEFT JOIN Custom_Field_Values v USING(i_customer)
WHERE
v.i_custom_field IN (16, 17, 18)
GROUP BY
c.name
答案 1 :(得分:0)
您可以尝试这样的LEFT JOIN:
class EndUser(models.Model):
username = models.CharField(max_length=20)
password = models.CharField(max_length=30)
full_name = models.CharField(max_length=100)
creation_date = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)