0

ページにデータを正しく表示するのに苦労しています。すべての未払いの請求書を検索する請求レポートのクエリを実行しています。それらを単一のページに表示し、未払いの残高を残高の経過時間別に表示したいと考えています。したがって、クライアント ABC に過去 1 年間に 10 件の請求書があり、そのうちのいくつかに未払いの残高がある場合、それらの残高を 0-30 / 30-60 / 60-90 / および 90 日以上前の列に表示したいと思います。これが私が持っているものです...

    $sql17 = "SELECT $mysql_billing.primary_key, $mysql_billing.a_name, $mysql_billing.invoicedate, $mysql_billing.finaltotal, $mysql_billing_dates.paidtotal,
 ($mysql_billing.finaltotal - $mysql_billing_dates.paidtotal) AS total
 FROM
   (SELECT $mysql_billing.primary_key, $mysql_billing.a_name, $mysql_billing.login_username, $mysql_billing.invoicedate,
   SUM($mysql_billing.custotal) AS finaltotal 
   FROM $mysql_billing where $today >= invoicedate AND $start_search_prev180_date <= invoicedate AND custotal != payments GROUP BY login_username) $mysql_billing 
 LEFT JOIN 
   (SELECT $mysql_billing_dates.id, $mysql_billing_dates.username, 
   SUM($mysql_billing_dates.amount) AS paidtotal 
   FROM $mysql_billing_dates where complete != 'yes' GROUP BY username) $mysql_billing_dates 
 ON ($mysql_billing.login_username = $mysql_billing_dates.username) 
 GROUP BY a_name ORDER BY a_name ASC";

これは結果を出力しているように見えますが、複数の日付変数に基づいて結果を異なる列に取得するにはどうすればよいですか? 4 つの別々のクエリを実行する必要がありますか?

4

2 に答える 2

1

SQL Fiddle は近いですが、いくつかの結合が正しくありませんでした。

SELECT 
  billing.a_name, 
  billing.finaltotal, 
  billing_dates.paidtotal,
  (billing.finaltotal - billing_dates.paidtotal) AS total,
   billing.TimePeriod
FROM
   (SELECT 
      a_name, 
      login_username, 
      SUM(custotal) AS finaltotal,
      CASE 
        WHEN invoicedate > DATE_SUB(CURDATE(),INTERVAL 30 DAY) THEN '30'
        WHEN invoicedate > DATE_SUB(CURDATE(),INTERVAL 60 DAY) THEN '60'
        WHEN invoicedate > DATE_SUB(CURDATE(),INTERVAL 90 DAY) THEN '90'
        ELSE '90+'
      END AS TimePeriod

    FROM billing 
    where CURDATE() >= invoicedate 
      AND CAST(20120601 AS DATETIME) <= invoicedate 
    GROUP BY login_username) billing 
 LEFT JOIN 
   (SELECT 
      username, 
      SUM(amount) AS paidtotal 
    FROM billing_dates
    GROUP BY username) billing_dates 
   ON (billing.a_name = billing_dates.username) 
ORDER BY a_name ASC;

これが更新されたFiddleです。

于 2013-01-16T02:13:59.437 に答える
0

クライアントの未払いの請求書をすべて選択し、コードを使用してそれらを期間ごとのリストに整理することをお勧めします。

これには単一のクエリを使用する方が高速である可能性が高く、プログラムで結果を簡単に分類できます。

次に、リストごとに 1 つの要素を選択して、レポートの行を作成します。

于 2013-01-16T00:36:27.607 に答える