2011-07-06 175 views
3

Journal_T - 基本上這是具有正值和負值的日誌表。 字段爲:iddate,ref,description, amount, segment,period,year如何將數據從一列分隔爲兩列,如表

我想顯示在兩個單獨的列 - debits(包含正值)和credits(包含負值)。以下是我使用的查詢:這類問題通常與幫助解決

SELECT id, 
    date, 
    ref, 
    description, 
    CASE WHEN SUM(amount) >= 0 THEN SUM(amount) ELSE NULL END AS positive, 
    CASE WHEN SUM(amount) < 0 THEN SUM(amount) ELSE NULL END AS negative, 
,segment,period,year FROM Journal_T GROUP BY segment,year,period,id 
+0

通過顯示,你的意思是,顯示給用戶?我會建議在你的代碼中做這件事,而不是在你的查詢中。保持查詢簡單,然後相應地格式化你的html。 – haydenmuhl

+0

@OMG小馬謝謝。 – mmdel

回答

0

如果我理解的模式,具有CASE做的CASE。但是我認爲他錯了,CASE確實應該在聚合函數中,像@OMG Ponies已經正確指出的那樣。在這裏:

SELECT 
    id, 
    date, 
    ref, 
    description, 
    SUM(CASE WHEN amount > 0 THEN Amount END) AS TotalPositive, 
    SUM(CASE WHEN amount < 0 THEN Amount END) AS TotalNegative, 
    segment, 
    period, 
    year 
FROM Journal_T 
GROUP BY segment, year, period, id 

在不同的角度,我不認爲的daterefdescription值有多大的意義輸出此查詢,只要你不將它們包含在GROUP BY列表。 MySQL允許你將它們包含到SELECT列表中而不用匯總,但是爲這些列返回的值可能是任意的,並且與其他檢索的數據(特別是和)沒有多大關係。

+0

我想你想要SUM'輪CASE語句,而不是表達式... –

+0

@Michael謝謝隊友。你是明星 – mmdel

+0

@OMG小馬可能是。我不知道我明白什麼原來的查詢拉動,但如果這對OP的作品... –

1

@邁克爾是正確的,即:

$qry = mysql_query("SELECT id, date, ref, description, SUM(amount), 
          segment, period, year 
         FROM Journal_T 
        GROUP BY segment, year, period, id") or die(mysql_error()); 
+0

+1這比我的要好。 –

相關問題