2013-02-26 148 views
1

我有這張桌子,Lineas(id,日期,proyect_id,小時),我想選擇一個星期的時間總和爲一個星期。例如,我需要這個輸出日期2013年1月1日和2013/05/01之間:選擇一週的5個日期

Proyect | 01/01/2013 | 02/01/2013 | 03/01/2013 | 04/01/2013 | 05/01/2013 
Proyect1 |  -  |  5  |  -  |  4  |  4 
Proyect2 |  4  |  2  |  8  |  4  |  2 
Proyect3 |  4  |  1  |  -  |  -  |  2 

這是表

Id | Proyect_id | date | hours 
    1 | Proyect1  | 02/01/2013 | 5 
    2 | Proyect1  | 04/01/2013 | 4 
    3 | Proyect1  | 05/01/2013 | 4 
    4 | Proyect2  | 01/01/2013 | 4 
    5 | Proyect2  | 02/01/2013 | 2 
    6 | Proyect2  | 03/01/2013 | 8 
    7 | Proyect2  | 04/01/2013 | 4 
    8 | Proyect2  | 05/01/2013 | 2 
    9 | Proyect3  | 01/01/2013 | 4 
    10 | Proyect3  | 02/01/2013 | 1 
    11 | Proyect3  | 05/01/2013 | 2 

任何幫助或線索中的數據?

在此先感謝

回答

4

MySQL沒有支點函數,因此您需要使用具有CASE表達式的集合函數來複制該功能。

如果你的價值觀是已知的,那麼你可以硬編碼它們與此類似:

select Proyect_id, 
    sum(case when date = '2013-01-01' then hours end) `2013-01-01`, 
    sum(case when date = '2013-02-01' then hours end) `2013-02-01`, 
    sum(case when date = '2013-03-01' then hours end) `2013-03-01`, 
    sum(case when date = '2013-04-01' then hours end) `2013-04-01` 
from Lineas 
group by Proyect_id 

SQL Fiddle with Demo

但是,如果值是未知的,那麼你將要使用準備語句生成動態SQL:

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'sum(case when date = ''', 
     date, 
     ''' then hours else 0 end) AS `', 
     date, '`' 
    ) 
) INTO @sql 
FROM Lineas; 

SET @sql = CONCAT('SELECT Proyect_id, ', @sql, ' 
        FROM Lineas 
        GROUP BY Proyect_id'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

SQL Fiddle with Demo

兩者都給出結果:

| PROYECT_ID | 2013-01-01 | 2013-02-01 | 2013-03-01 | 2013-04-01 | 
------------------------------------------------------------------ 
| Proyect1 |   0 |   5 |   0 |   4 | 
| Proyect2 |   4 |   2 |   8 |   4 | 
| Proyect3 |   4 |   1 |   0 |   0 | 
2

你可以在MySQL中使用聚集做支點:

select proyect_id, 
     sum(case when date = '01/01/2013' then hours end) as "01/01/2013", 
     . . . 
from t 
group by proyect_id 

. . .手段等爲列的其餘部分。

+0

yap!抱歉,但想法是在2個日期之間獲取這些數據,例如2013年1月1日至2013年1月15日。我必須建立這個輸出,給出2個日期,即初始和最終數據。 – 2013-02-26 14:39:37

+0

在這種情況下,您必須將該語句構建爲一個字符串,然後執行它。 SQL查詢具有固定數量的列。 – 2013-02-26 14:41:11

相關問題