複数のcustomer_IDが関連付けられているアドレスのリストを返し、同じcustomer_nameを持つcustomer_IDを除外して、アドレスが繰り返される回数を返す必要があります。
データは次のようになります。
CUSTOMER_ID | CUSTOMER_NAME | ADDRESS | MEMBER_SINCE
----------------------------------------------------------------------
A1000 | John Doe | 123 West Lane | 2/23/2005
A1001 | John Doe | 123 West Lane | 9/30/2005
A1002 | Tom White | 456 East Street | 5/7/2006
A1003 | Frank Smith | 123 West Lane | 12/12/2006
A1004 | Lisa Simpson | 456 East Street | 7/19/2007
A1005 | Clark Kent | 700 North Ave. | 2/23/2008
A1006 | Darth Vader | 123 West Lane | 9/29/2008
A1007 | John Doe | 456 East Street | 5/23/2007
A1008 | Bart Star | 456 East Street | 4/19/2006
結果セットを次のようにしたいと思います。
CUSTOMER_ID | CUSTOMER_NAME | ADDRESS | MEMBER_SINCE| COUNT
--------------------------------------------------------------------------------
A1000 | John Doe | 123 West Lane | 2/23/2005 | 3
A1002 | Tom White | 456 East Street | 5/7/2006 | 4
A1003 | Frank Smith | 123 West Lane | 12/12/2006 | 3
A1004 | Lisa Simpson | 456 East Street | 7/19/2007 | 4
A1006 | Darth Vader | 123 West Lane | 9/29/2008 | 3
A1007 | John Doe | 456 East Street | 5/23/2007 | 4
A1008 | Bart Star | 456 East Street | 4/19/2006 | 4
結果には、CUSTOMER_IDが異なっていても、別の行と同じADDRESSおよびCUSTOMER_NAMEを持つ行を無視しながら、CUSTOMER_ID、CUSTOMER_NAMES、ADDRESSES、MEMBER_SINCE、およびアドレスを共有する個別のCUSTOMER_IDのCOUNTが表示されます。複数のCUSTOMER_IDを持たないADDRESSESも除外されます。
CUSTOMER_NAMEとADDRESSは同じであり、重複している必要があるため、結果にはCUSTOMER_ID A1001が含まれていません。また、そのアドレスを持つ他の顧客がいないため、A1005は含まれていません。
これが始まりです:
SELECT
CUSTOMER_ID as CUSTOMER_ID,
"CUSTOMER_NAME" as CUSTOMER_NAME,
"ADDRESS",
"MEMBER_SINCE",
count(CUSTOMER_ID) as COUNTER
FROM CUSTOMER_TABLE
group by ADDRESS_ID, CUSTOMER_ID, CUSTOMER_NAME
having
count(CUSTOMER_ID)>1
order by CUSTOMER_ID;
しかし、重複したCUSTOMER_NAMESをなんとか取り出すことができません。
これは私の最初の投稿であり、私にとっては非常に遅いので、質問を正しく投稿しなかった場合は事前に謝罪します。
AR
上記のクエリは、ADDRESS
、CUSTOMER_ID
、およびCUSTOMER_NAME
でグループ化されます。 CUSTOMER_ID
は一意であるため、出力にはCUSTOMER_ID
ごとに1行が含まれます。
このクエリは正しい結果をもたらします:
SELECT
CUSTOMER_ID = MIN(ct.CUSTOMER_ID)
, ct.CUSTOMER_NAME
, ct. ADDRESS
, MEMBER_SINCE = MIN(ct.MEMBER_SINCE)
, cnt.c
FROM CUSTOMER_TABLE ct
INNER JOIN (
SELECT ADDRESS, COUNT(DISTINCT CUSTOMER_NAME) as c
FROM CUSTOMER_TABLE
GROUP BY ADDRESS
HAVING COUNT(ADDRESS) > 1
) as cnt ON cnt.ADDRESS = ct.ADDRESS
GROUP BY ct.ADDRESS, ct.CUSTOMER_NAME, cnt.c
ORDER BY MIN(ct.CUSTOMER_ID);
ここでは、ADDRESS and
CUSTOMER_NAMEonly and pick one of the
CUSTOMER_ID and
MEMBER_SINCE. I choose the
MIN(value) `でグループ化する必要があります。
同様のアドレスを持つ個別のCUSTOMER_ID
のカウントも必要なため、サブクエリに追加されました。
CUSTOMER_ID | CUSTOMER_NAME | ADDRESS | MEMBER_SINCE | COUNT
A1000 | John Doe | 123 West Lane | 2005-02-23 00:00:00.000 | 3
A1002 | Tom White | 456 East Street | 2006-05-07 00:00:00.000 | 4
A1003 | Frank Smith | 123 West Lane | 2006-12-12 00:00:00.000 | 3
A1004 | Lisa Simpson | 456 East Street | 2007-07-19 00:00:00.000 | 4
A1006 | Darth Vader | 123 West Lane | 2008-09-29 00:00:00.000 | 3
A1007 | John Doe | 456 East Street | 2007-05-23 00:00:00.000 | 4
A1008 | Bart Star | 456 East Street | 2006-04-19 00:00:00.000 | 4
SAP-Hanaにアクセスできないことに注意してください。ただし、これはかなり標準的なSQLのようであり、クエリを使用するとほとんどのRDBMSで機能するはずです。