我有两个名为Account table和Product table的表。
下表给出了两个表的记录:
帐户表:
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)。 如果身份证不存在任何产品或者不满足日期条件,那么它将具有“不”。该产品列的值。例如,对于account_id = 3,日期是2017,它与我们的谓词不匹配,因此isA的值是否。同样,对于account_id = 3,我们没有产品B条目。所以isB列也应该没有值。
目前我正在获取两个产品的两个记录的ID记录。 有没有办法以某种方式合并这些行。
答案 0 :(得分:2)
显然,您可以从产品表中获得所需的所有数据;不需要帐户表。按帐号分组,看看您是否有匹配。
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;
答案 1 :(得分:0)
要完成 @Thorsten Kettner 的回答,需要另一个CASE
。
假设您想要显示&#39; zNo&#39;单词而不是&#39; no&#39;单词,在这种情况下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