2012-02-17 33 views
0

我有这两个表。显示离开状态31天

Leave Table 

from_date  to_date   user_id 
2011-12-01 2011-12-01   1 
2011-12-01 2011-12-07   2 
2011-11-02 2011-11-04   3 


user table 
id  name 
1  john 
2  Caren 
3  Sam 

现在我需要用这种方式

NAME  1 2 3 4 5 6 7 ......up to 31 days 
john  L  
Caren L L L L L L L  
Sam   L L L 

那么,如何才能写出这样的查询显示输出?

任何建议将有所帮助。

回答

1

这是给你;-)

SELECT 
    u.*, 
    IF(1 BETWEEN DAYOFMONTH(from_date) AND DAYOFMONTH(to_date), 'L', NULL) '1', 
    IF(2 BETWEEN DAYOFMONTH(from_date) AND DAYOFMONTH(to_date), 'L', NULL) '2', 
    IF(3 BETWEEN DAYOFMONTH(from_date) AND DAYOFMONTH(to_date), 'L', NULL) '3', 

    IF(31 BETWEEN DAYOFMONTH(from_date) AND DAYOFMONTH(to_date), 'L', NULL) '31' 
FROM test.user u 
    JOIN `leave` l 
    ON u.id = l.user_id 

添加其他字段添加到查询,并添加WHERE过滤器来选择具体的月份。

+0

是不是太冗长? – diEcho 2012-02-17 07:23:20

+0

@diEcho是的。 – Devart 2012-02-17 07:25:12

+1

我认为它可以被简化,应该使用额外的表和数据透视表。 – Devart 2012-02-17 07:26:24