0

これを使用すると、transactionIDに基づくテーブルから合計レコードをフェッチできないため、group_concatに関連する問題に直面しています。これがストアドプロシージャコードです。これでは、strSplitと呼ばれる分割関数を使用しています。

BEGIN

DECLARE iCount int;

DECLARE i int;

DECLARE txn VARCHAR(65000);

DECLARE txId VARCHAR(17);

CREATE TEMPORARY TABLE report_transaction (client_id INT NOT NULL AUTO_INCREMENT, productName VARCHAR(200), itxnId VARCHAR(100),PRIMARY KEY(client_id));

select count(distinct(tt.TxnId)) into iCount from tbl_transaction tt;

SELECT group_concat(distinct((tt.TxnId)) separator ', ') product into txn  from tbl_transaction tt;

SET i=1;

WHILE i<iCount+1 DO

select strSplit(txn, ',', i) into txId;

SELECT RTRIM(LTRIM(txId));

 INSERT INTO report_transaction(productName,itxnId) select group_concat((tt.ProductName) separator ',') products,tt.TxnId from tbl_transaction tt where tt.TxnId= txId;

    SET i = i + 1;

END WHILE;

     SELECT * FROM report_transaction;
     drop table report_transaction;

END

テーブルレコードのような結果が必要ですが、最初のレコードのみが表示され、他のフィールドはnullになります。

4

1 に答える 1

0

あなたが望むことは、単一のクエリで実行できると思います:

INSERT INTO report_transaction(productName,itxnId)
    select group_concat((tt.ProductName) separator ',') as products, tt.TxnId
    from tbl_transaction tt
    group by tt.TxnId;

ID を保存したり、何かをトリミングまたは分割したりするために、一時テーブルは必要ありません。

一般に、適切な場合に SQL クエリを使用すると、パフォーマンスが大幅に向上します。

ところで、テーブル内の行を繰り返し処理する必要がある場合は、カーソルについて学ぶ必要があります。

于 2012-10-05T15:40:44.677 に答える