2012-02-17 40 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