2017-07-25 217 views
0

我有一个招聘表如下图所示:SQL组按列和列值?

------------------------------------------------------ 
| slot_id | hired_days | qty | amt | return | 
-----------|-------------|-------|-------|-----------| 
| 1  |  30  | 5 | 100 |  0  | 
| 1  |  30  | 15 | 300 |  0  | 
| 1  |  30  | 12 | 170 |  1  | 
| 1  |  25  | 13 | 180 |  0  | 
| 1  |  30  | 4 | 180 |  1  | 
| 2  |  30  | 15 | 300 |  0  | 
------------------------------------------------------ 

我想要的结果通过SLOT_ID和hired_days进行分组,但分组应该只为0行返回值来完成。结果表需要显示所有分组行并返回1个数据。有没有办法用SQL来做到这一点?

------------------------------------------------------- 
| slot_id | hired_days | qty | amt | return | 
|----------|-------------|--------|-------|-----------| 
| 1  |  30  | 20 | 400 |  0  | 
| 1  |  25  | 13 | 180 |  0  | 
| 1  |  30  | 12 | 170 |  1  | 
| 1  |  30  | 4 | 180 |  1  | 
| 2  |  30  | 15 | 300 |  0  | 
------------------------------------------------------- 

回答

1

您可以使用UNION操作

SELECT slot_id,hired_days,sum(qty),sum(amt),return FROM hiring 
WHERE return=0 GROUP BY slot_id,hired_days 
UNION ALL 
SELECT slot_id,hired_days,qty,amt,return FROM hiring WHERE return =1 
0

尝试此查询....

select slot_id, hired_days, sum(qty), sum(amt), return from hiring where return = 0 group by slot_id, hired_days, return union select slot_id, hired_days, qty, amt, return from hiring where return = 1