0

基本sql查询遇到问题,我需要总结很多信息,我正在使用的查询是:

SELECT date, id, actions
FROM accounts 
WHERE (date between '2013-07-01' and '2013-9-30') AND (id in (---ids---));

现在我得到

date 1    id1   actions
date 2    id1   actions
date 3    id1   actions
date 4    id1   actions
date 5    id1   actions
date 6    id1   actions

date 1    id2   actions
date 2    id2   actions
date 3    id2   actions
date 4    id2   actions
date 5    id2   actions
date 6    id2   actions

我想要的是

date 1    id1   actions  id2  actions
date 2    id1   actions  id2  actions
date 3    id1   actions  id2  actions
date 4    id1   actions  id2  actions
date 5    id1   actions  id2  actions
date 6    id1   actions  id2  actions

最简单的方法是什么?

4

1 回答 1

2

假设在给定日期只有一个,那么这是一个透视查询id1id2在某些数据库中有用于枢轴的特殊语法,但以下通常有效:

SELECT date,
       max(case when id = 'id1' then id end) as id1,
       max(case when id = 'id1' then actions end) as id1_actions,
       max(case when id = 'id2' then id end) as id2,
       max(case when id = 'id2' then actions end) as id2_actions
FROM accounts 
WHERE (date between '2013-07-01' and '2013-9-30') AND (id in (---ids---))
group by date
order by date;

请注意,这date是某些数据库中的关键字,因此您需要以某种方式引用它(例如使用双引号、反引号或方括号)。

于 2013-10-28T20:02:14.917 回答