2013-02-26 92 views
1

因此,在我的查詢中,我需要從不同位置轉儲出結果。其中一些結果可能需要在其之前有「<」或「>」符號。最終,這個查詢使用INTO OUTFILE導出,但該部分起作用。發生的事情是,當我嘗試從gtlt值連接結果值到參數的結果值總是中斷...我已經添加了a,b,c和x,以便您可以看到顯示的內容在哪裏...我非常確定它必須與第二個聲明,但我不明白。Mysql結果總是在SELECT ... FROM(SELECT ...)中返回NULL

反正....這裏是我的代碼條紋下來例如:

SELECT  
'VAR 1', 
'VAR 2', 
'VAR 3' 
UNION 
(SELECT   
CONCAT(if(result.parameter = '10', result.gtlt,'a '),COALESCE(sum(if(result.parameter = '10', result.result, NULL)),'-')) as 'VAR 1', 
CONCAT(if(result.parameter = '61', result.gtlt,'b '),COALESCE(sum(if(result.parameter = '61', result.result, NULL)),'-')) as 'VAR 2', 
CONCAT(if(result.parameter = '78', result.gtlt,'c '),COALESCE(sum(if(result.parameter = '78', result.result, NULL)),'-')) as 'VAR 3' 
FROM ( 
    SELECT 
     event.id, 
     event.end_date, 
     event_result.parameter, 
     event_result.result, 
     COALESCE(CAST(event_result.gtlt as CHAR), 'x') as gtlt, 
     event.tag 
    FROM event 
    Inner Join event_result ON event_result.tag = event.tag 
    Inner Join tblesdstations19 ON tblesdstations19.id = event.id 
    WHERE (event.id = '735' OR event.id = '845' OR event.id = '209') AND `event`.`end_date` >= '1998-01-13' AND `event`.`end_date` <= '2010-02-09') as result  
WHERE result.parameter = '10' OR result.parameter = '61' OR result.parameter = '78' group by result.id, result.end_date, result.tag 
order by 
    result.id ASC, 
    result.end_date DESC) 

這裏是返回什麼是一個示例:

VAR 1 VAR 2 VAR 3 
x17.8 b 9.49 c - 
x25.8 b 9.21 c - 
x17.5 b 29 c 0.36 
x16.6 b 9.6 c 0.52 
x26.2 b 7.4 c 0.49 
x24.3 b 7.9 c 0.34 
x27.5 b 9.9 c - 
a - x7.9 c - 
a - x8.2 c - 
a - x5.7 c - 
x16.8 b 2.16 c - 
x22.2 b 1.84 c - 
x26.2 b - c - 
x22.7 b 0.67 c - 
x18.5 b 19 c 0.15 
x14 b 1.3 c 0.91 
x19.5 b 12 c 0.38 
a - x1.2 c - 
x23.5 b 0.74 c 0.92 

如果我剝奪我們的VAR 1和2個選擇和它適用於VAR 3 ...

SELECT 'VAR 3' 
UNION 
(SELECT   
CONCAT(if(result.parameter = '78', result.gtlt,'c '),COALESCE(sum(if(result.parameter = '78', result.result, NULL)),'-')) as 'VAR 3' 
FROM ( 
    SELECT 
     event.id, 
     event.end_date, 
     event_result.parameter, 
     event_result.result, 
     COALESCE(CAST(event_result.gtlt as CHAR), 'x') as gtlt, 
     event.tag 
    FROM event 
    Inner Join event_result ON event_result.tag = event.tag 
    Inner Join tblesdstations19 ON tblesdstations19.id = event.id 
    WHERE (event.id = '735' OR event.id = '845' OR event.id = '209') AND `event`.`end_date` >= '1998-01-13' AND `event`.`end_date` <= '2010-02-09') as result  
WHERE result.parameter = '78' group by result.id, result.end_date, result.tag 
order by 
    result.id ASC, 
    result.end_date DESC) 

給我...

VAR 3 
x0.36 
>0.52 
>0.49 
>0.34 
x0.15 
>0.91 
x0.38 
x0.92 
>0.48 

編輯:添加參數的分組方式,列表給出了這樣的結果:

17.8  - - 
    - 9.49  - 
25.8  - - 
    - 9.21  - 
17.5  - - 
    - 29 - 
    -  - 0.36 
16.6  - - 
    - 9.6 - 
    -  - >0.52 
26.2  - - 
etc... 

表現「<」「>」 sypbols但就像我需要不給行中的值。

+0

唯一的可能性,我可以看到的是,你正在使用GROUP BY沒有所有的列(沒有聚合列無論如何),其中之一是你的聚結中使用的參數列。它的值很可能在多行返回時是不確定的(例如,第一個例子),但在第二個工作示例中,行的這種可能性不會有多個值。 – Kickstart 2013-02-26 17:32:08

+0

這兩個輸出是不是一致的:第一個的所有非空「c」值在第二個中出現(除了最後的「0.48」,我認爲它沒有被粘貼)?你能指出第一個輸出中的某個特定值是錯誤的嗎? – 2013-02-26 17:37:43

+0

x16.6 b 9.6 c 0.52應該是x16.6 x9.6> 0.52 – 2013-02-26 18:18:10

回答

0

GOT IT !!!!而不是SUM我用GROUP_CONCAT並用「>」或串接結果「<」的子結果集

COALESCE(GROUP_CONCAT(if(result.parameter = '10', result.result, NULL)),'-') as 'VAR 1', 
... 
CONCAT(COALESCE(result.gtlt,''),' ',result.result) as result, 
相關問題