3

ここでの私の最初の投稿は、投稿ガイドラインに正しく従っていることを願っています。そうでない場合は、指摘してください。

いくつかのサンプルデータを含む私のテーブル構造(credit_notes)は次のようになります。

index | customer_id | user_id | doc_number | doc_date   | amount | scheme_description
+-----+-------------+---------+------------+------------+--------+-------------------
1     | 8           | 2       | IABCD001   | 2012-09-08 | 1232   | XYZ Scheme
2     | 8           | 2       | IABCD001   | 2012-09-08 | 2032   | XYZ Scheme 
3     | 8           | 2       | IABCD002   | 2012-09-09 | 2556   | XYZ Scheme 
4     | 8           | 2       | IABCD003   | 2012-09-08 | 232    | XYZ Scheme 
5     | 8           | 2       | IABCD001   | 2012-09-10 | 2556   | ABC Scheme
6     | 8           | 2       | IABCD003   | 2012-09-10 | 232    | ABC Scheme 

私の要件は、scheme_descriptionとdoc_dateの組み合わせごとに、グループ化して合計金額を抽出することです。これは私の現在のクエリです:

SELECT 
    SUM( `amount` ) AS `totalamount`,
    GROUP_CONCAT( CONCAT( `amount` , ";" ) ORDER BY `index` DESC SEPARATOR '' ) AS `amounts`, 
    GROUP_CONCAT( CONCAT( `doc_number` , ";" ) ORDER BY `doc_number` DESC SEPARATOR '' ) AS `docno` , 
    `doc_date` AS `docdate` , 
    `scheme_description` AS `schemedesc` 
FROM (
        SELECT 
            `c`.`index` ,
            `c`.`doc_number` , 
            `c`.`doc_date` , 
            `c`.`amount` , 
            `c`.`scheme_description` 
        FROM `credit_notes` AS `c` 
        WHERE `c`.`customer_id` = 8 
        AND `c`.`user_id` LIKE 2
)t
GROUP BY `scheme_description` , `doc_date`

このクエリは次の構造を返します。

totalamount | amounts        | docno                       | docdate    | schemedesc
+-----------+----------------+-----------------------------+------------+-----------
3496        | 1232;2032;232; | IABCD001;IABCD001;IABCD003; | 2012-09-08 | XYZ Scheme
2556        | 2556;          | IABCD002;                   | 2012-09-09 | XYZ Scheme
23477       | 255;23222;     | IABCD007;IABCD007;          | 2012-09-10 | ABC Scheme

ただし、これを少し変更する必要があります。個別のdocnoごとに金額の列を合計し、正しい順序でグループ化します。したがって、上記のデータに従って、クエリは次のようになります。

totalamount | amounts        | docno                       | docdate    | schemedesc
+-----------+----------------+-----------------------------+------------+-----------
3496        | 3264;232;      | IABCD001;IABCD003;          | 2012-09-08 | XYZ Scheme
2556        | 2556;          | IABCD002;                   | 2012-09-09 | XYZ Scheme
23477       | 23477;         | IABCD007;                   | 2012-09-10 | ABC Scheme

これは、group_concatとdistinctandsumを使用して可能ですか。私が見つけたすべてを読んでください、しかし私を正しい方向に向けたものを見つけることができませんでした。

これは可能ですか?

4

3 に答える 3

1

最初のクエリは次のように記述できます。

select
  doc_date, scheme_description,
  group_concat(doc_number),
  group_concat(amount),
  sum(amount)
from
  credit_notes
group by doc_date, scheme_description

そしてあなたの2番目:

select
  doc_date, scheme_description,
  group_concat(doc_number),
  group_concat(amount),
  sum(amount)
from (
  select doc_date, scheme_description, doc_number, sum(amount) as amount
  from credit_notes
  group by doc_date, scheme_description, doc_number
) s
group by doc_date, scheme_description
于 2012-12-05T10:53:11.377 に答える
0

このクエリを試してください-

SELECT
  SUM(amount) totalamount,
  GROUP_CONCAT(amount) amounts,
  GROUP_CONCAT(doc_number) docno,
  doc_date docdate,
  scheme_description schemedesc
FROM (
  SELECT scheme_description, doc_date, doc_number, SUM(amount) amount
    FROM credit_notes
    GROUP BY scheme_description, doc_date, doc_number) t
GROUP BY scheme_description, doc_date

必要に応じて、WHERE、ORDER BY、およびその他の句を追加します。

于 2012-12-05T10:48:59.517 に答える
0

このクエリを試してください

select 
    group_concat(doc_num) as DocNumm,
    group_concat(amount) as DocNumm,
    scheme_description as SchemaDesc,
    sum(amount) as TotalAmount,
    amount as Amount,
    doc_date as DocDate
from (
    SELECT * from `schema` 
) as g
group by SchemaDesc , DocDate
于 2012-12-05T11:05:10.457 に答える