4

一連のレコードがある場合

name    amount    Code
Dave    2         1234
Dave    3         1234
Daves   4         1234

これをコードと名前に基づいてグループ化したいのですが、最後の行の名前にタイプミスがあるため、グループ化できません。

これらを次のようにグループ化する最良の方法は何でしょう:

Dave/Daves 9 1234

4

5 に答える 5

6

原則として、データが間違っている場合は、データを修正する必要があります。

ただし、とにかくレポートを実行したい場合は、グループ化する別の基準を考え出すことができます。たとえば、LEFT(Name, 4) は名前の最初の 4 文字でグループ化を実行します。

CASE ステートメントをメソッドと見なすこともできます (CASE WHEN name = 'Daves' THEN 'Dave' ELSE name) が、特にこのメソッドを他の目的で使用することを提案している場合は、このメソッドが本当に好きではありません。ワンオフレポート。

于 2009-02-25T15:46:26.793 に答える
5

それが回避策である場合は、試してください

SELECT cname, SUM(amount)
FROM (
  SELECT CASE WHEN NAME = 'Daves' THEN 'Dave' ELSE name END AS cname, amount
  FROM mytable
)
GROUP BY cname

この if course は、この正確なケースのみを処理します。

于 2009-02-25T15:45:52.877 に答える
1

MySQL の場合:

select
  group_concat(distinct name separator '/'),
  sum(amount),
  code
from
  T
group by
  code

MSSQL 2005 以降では、group_concat() を .NET カスタム集計として実装できます。

于 2009-02-25T16:01:09.363 に答える
1

タイプミスを修正しますか?それ以外の場合、名前でグループ化すると、新しいグループが作成されます。

データを「回避」する方法を考案するのではなく、データを修正することが最優先事項であるべきです。

また、データにこの 1 つのタイプミスがある場合、コードにうまく適合しないさらに厄介なデータがある (または将来のある時点である) 可能性が高いことに注意してください。データのクリーンさに焦点を当てる必要があるときに、それに対処するための「回避策」をますます考案する必要があります。

于 2009-02-25T15:45:42.037 に答える
1

name フィールドがキーであると想定される場合、Dave と Daves は 2 つの異なるアイテムであり、異なるグループに分けられる必要があると想定する必要があります。ただし、タイプミスの場合は、他の人が示唆しているように、データを修正してください。

自由形式で入力されたテキスト フィールドでグループ化すると、常に問題が発生します。データ入力は決して 100% ではありません。

私にとっては、それがキー フィールドである場合はコードだけでグループ化し、グループ化から名前を除外する方が理にかなっています。

于 2009-02-25T16:09:06.927 に答える