我有两个表,名为Account表和Product表。
两个表格的记录如下:
账户表:
Id
1
2
3
4
产品表:
account_id date product
1 2015 A
1 2016 B
2 2012 B
2 2013 A
3 2017 A
预期结果:
id isA isB
1 Yes No
2 Yes Yes
3 No No
我想得到示例中所示的给定谓词(日期)(小于2016)的结果(乘积为列)。如果id不存在任何产品,或者不满足日期条件,则该产品列的值为"否"。例如,对于account_id=3,日期是2017,这与我们的谓词不匹配,因此isA的值是No。类似地,对于accountid=3,我们没有产品B条目。所以isB列也应该有No值。
目前,我得到了两个ID的记录,这两个产品都有条目。有没有办法以某种方式合并这些行。
显然,您可以从产品表中获得所需的所有数据;不需要accounts表。按帐号分组,看看是否有匹配项。
SELECT
account_id,
MAX(CASE WHEN product = 'A' AND date < 2016 THEN 'yes' ELSE 'no' END) AS isa,
MAX(CASE WHEN product = 'B' AND date < 2016 THEN 'yes' ELSE 'no' END) AS isb
FROM product
GROUP BY account_id;
要完成@Thorsten Kettner的回答,需要另一个CASE
。
假设您想显示"zNo"字而不是"no"字,在这种情况下,MAX
函数不会返回正确的结果。
SELECT
account_id,
CASE WHEN(MAX(CASE WHEN product = 'A' AND DATE < 2016 THEN 1 ELSE 0 END) = 1) THEN 'Yes' ELSE 'No' END as isA,
CASE WHEN(MAX(CASE WHEN product = 'B' AND DATE < 2016 THEN 1 ELSE 0 END) = 1) THEN 'Yes' ELSE 'No' END as isB
FROM Product
GROUP BY account_id