0

単純なテーブル (ID、Member_ID、支払い、日付、支払いシリアル、running_total) があります。データを別のシステムにエクスポートするために payment_serial が必要です。

必要なエクスポートは、メンバーが行ったすべての支払い (支払いと日付を表示) であり、payment_serial の順に並べ替えられ、1 行に並べられています。

これは私が使用した最初のクエリでした:

SELECT
  `Member_ID`,
  IF(`payment_serial`=1,`payment`,0) AS `p1`,
  IF(`payment_serial`=1,`date`,0) AS `p1_date`,
  IF(`payment_serial`=1,`ID`,0) AS `p1_ID`,
  IF(`payment_serial`=2,`payment`,0) AS `p2`,
  IF(`payment_serial`=2,`date`,0) AS `p2_date`
  IF(`payment_serial`=2,`ID`,0) AS `p2_ID`,
FROM monthlies
WHERE `Member_ID` = 4198739

このクエリを使用すると、必要な支払いが表示されますが、それぞれが別の行に表示されます (次の段階で大きなインポートの問題が発生します)。

Member_ID    p1     p1_date  p1_ID    p2    p2_date  p2_ID ...
  4198739   34.50    41143    214      0      0       0    ... 
  4198739     0        0       0     34.50  41176    583   ...

GROUP BY を追加しました:

SELECT
  IF(`payment_serial`=1,`payment`,0) AS `p1`,
  IF(`payment_serial`=1,`date`,0) AS `p1_date`,
  IF(`payment_serial`=1,`ID`,0) AS `p1_ID`,
  IF(`payment_serial`=2,`payment`,0) AS `p2`,
  IF(`payment_serial`=2,`date`,0) AS `p2_date`,
  IF(`payment_serial`=2,`ID`,0) AS `p2_ID`
FROM monthlies
WHERE `Member_ID` = 4198739
GROUP BY `Member_ID`

これにより、メンバーごとに1行が表示されますが、支払いごとではありません。

Member_ID    p1     p1_date  p1_ID    p2    p2_date  p2_ID ...
  4198739   34.50    41143    214      0      0       0    ... 

どこが間違っていますか?

4

3 に答える 3

2

それは完全にあなたのせいではありません。MySQLはGROUPBYを間違って実装しています。他のSQLプラットフォームでは、この時点で構文エラーが発生します。

試す

SELECT 
  MAX(IF(`payment_serial`=1,`payment`,0)) AS `p1`, 
  MAX(IF(`payment_serial`=1,`date`,0)) AS `p1_date`, 
  MAX(IF(`payment_serial`=1,`ID`,0)) AS `p1_ID`, 
  MAX(IF(`payment_serial`=2,`payment`,0)) AS `p2`, 
  MAX(IF(`payment_serial`=2,`date`,0)) AS `p2_date`, 
  MAX(IF(`payment_serial`=2,`ID`,0)) AS `p2_ID` 
FROM monthlies 
WHERE `Member_ID` = 4198739 
GROUP BY `Member_ID` 
于 2012-10-11T12:42:10.023 に答える
2

GROUP_BY からの間違った出力が予期されています。MySQLGROUP_BYでは、etc などのコマンドと組み合わせて使用​​し、MAX, AVG, SUMすべての結果を 1 つの行にまとめて取得します。

そのため、データをエクスポートする場合、group by を使用せずにすべての行を取得するのが最善の方法です。各行が一意のメンバー ID で保持されるためです。

于 2012-10-11T12:46:58.667 に答える
0

GROUP BYは、SELECTのIFの前にあります。

于 2012-10-11T12:42:20.817 に答える