2017-06-13 100 views
-1

我有这样分组列按类型

+----------------------------------------------+ 
| id | user_id | date  | vehicle_type | 
+----------------------------------------------+ 
| 1 | 1  | 2017-06-01 |  1  | 
| 2 | 1  | 2017-06-01 |  2  | 
| 3 | 1  | 2017-06-01 |  1  | 
| 4 | 1  | 2017-06-02 |  2  | 
| 5 | 1  | 2017-06-02 |  1  | 
| 6 | 2  | 2017-06-01 |  2  | 
| 7 | 2  | 2017-06-01 |  1  | 
| 8 | 2  | 2017-06-01 |  2  | 
| 9 | 2  | 2017-06-02 |  1  | 
+----------------------------------------------+ 

主表欲组由user_iddate,和求和汽车类型取决于它的值,并创建作为视图。 这里的输出我想

+------------------------------------------------+-------------------+ 
| id | user_id | date  | vehicle_type_1 | vehicle_type_2 | 
+------------------------------------------------+-------------------+ 
| 1 | 1  | 2017-06-01 |  2   |   2  | 
| 4 | 1  | 2017-06-02 |  1   |   1  | 
| 6 | 2  | 2017-06-01 |  1   |   2  | 
| 9 | 2  | 2017-06-02 |  1   |   0  | 
+------------------------------------------------+-------------------+ 

的问题是最好的SQL(查询),以获得输出像我想要的。 谢谢,

+5

什么都有你已经试过了? – BenM

+0

我试图创建2(vehicle_type_1和vehicle_type_2)视图然后我加入 – Adzimzf

+0

是否只有两种类型的车辆可以有第三个;(第四等?)你需要动态SQL数据透视吗?或只是一个枢轴?或将一个简单的案例陈述工作? – xQbert

回答

1

您需要使用case语句来获取所需的输出。尝试下面一个

select max(id) id,user_id,date,sum(case when vehicle_type=1 then 1 else 0 end) vehicle_type_1,sum(case when vehicle_type=2 then 1 else 0 end) vehicle_type_2 from urtable 
    group by user_id,date 
+0

感谢它的工作 – Adzimzf

2
SELECT user_id 
    ,date 
    ,SUM(IIF(vehicle_type = 1,1,0)) as vehicle_type_1 
    ,SUM(IIF(vehicle_type = 2,1,0)) as vehicle_type_2 
FROM yourtable 
GROUP BY user_id, date 

为什么你需要的ID在输出我不明白这一点。如果真的需要,只是SELECT子句

+0

我已经尝试过,但我得到的功能IFF不存在 – Adzimzf

+0

所以只是juse case vehicle when type = 1 then 1 else 0 end instead of IIF (vehicle_type = 2,1,0) –

+0

@Adzimzf:用**'IF' **替换**'IIF' **。 – spencer7593

0

根据上面的问题提到作为解决它,请尝试执行下面的SQL SELECT查询语句描述添加MIN(ID)或MAX(ID)

SELECT user_id, 
     date, 
     Count(id)  AS vehicle_type_1, 
     (SELECT Count(id) 
     FROM mytbl 
     WHERE vehicle_type = 2 
       AND user_id = tbl.user_id 
       AND date = tbl.date 
     GROUP BY user_id, 
        date) AS vehicle_type_2 
FROM mytbl AS tbl 
WHERE vehicle_type = 1 
GROUP BY user_id, 
      date