0

領収書と支出用の2つのテーブルがあり、ユニオンを使用してそれらをマージし、レポートを生成しています

SELECT  MIN(date) AS trx, MAX(date), COUNT(*), SUM(amount), CONCAT(' - ','-'),
    $f as _ 
FROM expenditure WHERE date >= '$start_date' AND date <= '$end_date'
    AND client_id like '{$_SESSION['client']['id']}'
GROUP BY _

UNION

SELECT  MIN(date) AS trx, MAX(date), COUNT(*),CONCAT(' - ','-'), SUM(amount),
    $f as _ 
FROM receipts
WHERE  date >= '$start_date'  AND date <= '$end_date'
   AND client_id like '{$_SESSION['client']['id']}'
GROUP BY _
ORDER BY trx

次の結果が得られます

  Array ( 
          [0] => Array ( [trx] => 2012-03-06 [MAX(date)] => 2012-03-06 [COUNT(*)] => 1 [SUM(amount)] => 120000 [CONCAT(' - ','-')] => - - [_] => 2012-03-06 )
          [1] => Array ( [trx] => 2012-03-08 [MAX(date)] => 2012-03-08 [COUNT(*)] => 1 [SUM(amount)] => 120000 [CONCAT(' - ','-')] => - - [_] => 2012-03-08 )
          [2] => Array ( [trx] => 2012-06-06 [MAX(date)] => 2012-06-06 [COUNT(*)] => 2 [SUM(amount)] => 60000 [CONCAT(' - ','-')] => - - [_] => 2012-06-06 ) 
          [3] => Array ( [trx] => 2012-06-06 [MAX(date)] => 2012-06-06 [COUNT(*)] => 1 [SUM(amount)] => - - [CONCAT(' - ','-')] => 487200 [_] => 2012-06-06 )
          [4] => Array ( [trx] => 2012-06-08 [MAX(date)] => 2012-06-08 [COUNT(*)] => 1 [SUM(amount)] => 120000 [CONCAT(' - ','-')] => - - [_] => 2012-06-08 )
          [5] => Array ( [trx] => 2012-06-29 [MAX(date)] => 2012-06-29 [COUNT(*)] => 2 [SUM(amount)] => 320000 [CONCAT(' - ','-')] => - - [_] => 2012-06-29 )  )

問題 3 と 4 に気が付くと、1 日の記録が 2 つあります。

[trx] => 2012-06-06

その日、クライアントはクレジットとデビットの両方を実行したためです。3 と 4 のような行のみを 1 つの行に結合する方法はありますか。SELECT DISTINCT は機能しません。または、mysql が同じ日に発生する両方のテーブルからレコードを合計することは可能ですか。

4

2 に答える 2

0

カスタムエイリアスのサブセレクトを使用してグループ化できます

$query = "
    SELECT q.* 
    FROM (
        SELECT  
            MIN(date) AS trx, 
            MAX(date) as max_date, 
            COUNT(*), 
            SUM(amount), 
            CONCAT(' - ','-'),
            $f as _ 
        FROM 
            expenditure 
        WHERE 
            date >= '$start_date'  
            AND date <= '$end_date'  
            AND client_id like '{$_SESSION['client']['id']}' 
        GROUP BY _ 
    UNION
        SELECT  
            MIN(date) AS trx, 
            MAX(date), 
            COUNT(*),
            CONCAT(' - ','-'),
            SUM(amount), 
            $f as _ 
        FROM 
            receipts 
        WHERE  
            date >= '$start_date'  
            AND  date <= '$end_date'  
            AND  client_id like '{$_SESSION['client']['id']}' 
        GROUP BY _ ORDER BY trx 
    ) q GROUP BY q.max_date
";

上記のクエリは、結果をグループ化します MAX(date) as max_date

そして、同じ日付の金額の合計については、次のように変更できます

$query = "
    SELECT 
        q.*, 
        SUM(q.amount) AS grand_sum 
    FROM (
        SELECT  
            MIN(date) AS trx, 
            MAX(date) as max_date, 
            COUNT(*), 
            SUM(amount) AS amount, 
            CONCAT(' - ','-'),
            $f as _ 
        FROM 
            expenditure 
        WHERE 
            date >= '$start_date'  
            AND date <= '$end_date'  
            AND client_id like '{$_SESSION['client']['id']}' 
        GROUP BY _ 
    UNION
        SELECT  
            MIN(date) AS trx, 
            MAX(date), 
            COUNT(*),
            CONCAT(' - ','-'),
            SUM(amount), 
            $f as _ 
        FROM 
            receipts 
        WHERE  
            date >= '$start_date'  
            AND  date <= '$end_date'  
            AND  client_id like '{$_SESSION['client']['id']}' 
        GROUP BY _ ORDER BY trx 
) q GROUP BY q.max_date
";

このgrand_sum列には、同じ日付の金額の合計が表示されます

于 2013-08-16T21:29:18.937 に答える