2011-07-06 7 views
3

Journal_T - これは基本的に正と負の値を持つジャーナルテーブルです。 フィールドは次のとおりです。iddaterefdescriptionamountsegmentperiodyear1列の値を表として2列に分ける方法

debits(正の値を含む)とcredits(負の値を含む)の2つの別々の列に表示するとします。私は、スキーマを理解していれば

$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

表示すると、ユーザーに表示されますか?私はあなたのコードではなく、あなたのクエリでこれを行うことをお勧めします。クエリをそのままにして、それに従ってHTMLをフォーマットしてください。 – haydenmuhl

+0

@OMGポニーズありがとう。 – mmdel

答えて

0

は、CASEでそれを行う:

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

私はあなたがSUMの式の中ではなくCASEステートメントの周りにしたいと思う... –

+0

@マイケル感謝の仲間。あなたは星です – mmdel

+0

@OMGポニーズかもしれません。私は元のクエリが引き出していたものを理解しているとは確信していませんが、OPのためにこれが動作するかどうかはわかりません... –

1

@Michaelが、その中に右であるこの種の問題は、一般的に助けを借りて解決され、以下の私が使用しているクエリがあります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 

異なる点については、私はあなたがGROUP BYリストにそれらが含まれていない限り、このクエリの出力にdaterefdescriptionの値はあまり意味を持っていることはないと思います。 MySQLでは集計せずにSELECTリストに含めることができますが、これらの列に返される値は任意であり、検索される他のデータ、特に合計にはあまり関係しません。

+0

+1これは私より優れています。 –

関連する問題