我在使用案例时遇到问题,并在redshift中加入 (这不是我的真实数据,仅用于示例,因此max不能帮助我)。 这是我的查询:
select a.num1,
(case when b.param = 'd' then b.param
when b.param = 'c' then b.param
when b.param = 'b' then b.param
when b.param = 'a' then b.param end)
from table a inner join table b on a.num1 = b.num1
对于表a:
对于表b:
我得到的结果是:
但是我只想为每个'num1'的情况获得第一个匹配项,例如:
我该如何实现?谢谢!
答案 0 :(得分:2)
对于此数据,您可以使用max()
:
select a.num1,
max(case when b.param = 'd' then b.param
when b.param = 'c' then b.param
when b.param = 'b' then b.param
when b.param = 'a' then b.param
end)
from table a inner join
table b
on a.num1 = b.num1
group by a.num1;
这可以简化为:
select a.num1, max(b.param)
from table a inner join
table b
on a.num1 = b.num1
group by a.num1;
这回答了您提出的问题。这可能无法解决您的实际问题。我建议您问一个另一个问题,并提供更合适的示例数据并更好地描述您想做什么。
答案 1 :(得分:0)
这个问题在 another question I've opened。
我需要使用coalesce:
SELECT a.id,
COALESCE( MAX(CASE WHEN b.param_type = 'Ignition' THEN a.param_value END),
MAX(CASE WHEN b.param_type = 'Turn' THEN a.param_value END),
MAX(CASE WHEN b.param_type = 'Speed' THEN a.param_value END),
MAX(CASE WHEN b.param_type = 'Break' THEN a.param_value END)
) as value
FROM public.tbl_a a JOIN
public.tbl_b
ON b.id = a.id
GROUP BY a.id;