The following answer use knowledge of my another post https://stackoverflow.com/a/36989929/4266330
The following script will return the result you want
SELECT 'SELECT '||GROUP_BY_COLS||', COUNT(*)'||CHR(13)||
' FROM '||SCHEMA||'.'||TABLENAME||CHR(13)||
' GROUP BY '||GROUP_BY_COLS||' HAVING COUNT(*)>1'||CHR(13)||
' LIMIT 100;'
FROM (
SELECT
R.SCHEMA AS SCHEMA
,R.NAME AS TABLENAME
,TOOLKIT.SQLEXT.REGEXP_REPLACE(TOOLKIT.SQLEXT.GROUP_CONCAT('@'||LPAD(K.CONSEQ, 4, '0')||'@'||K.ATTNAME, ', '),
'@[0-9]{4}@', '') AS GROUP_BY_COLS
FROM _V_RELATION_COLUMN R
JOIN _V_RELATION_KEYDATA K
ON (R.SCHEMA=K.SCHEMA
AND R.NAME=K.RELATION
AND R.ATTNAME=K.ATTNAME)
WHERE K.CONTYPE='p'
GROUP BY 1, 2
) S;
Sample result:
SELECT IDP_EFFECTIVE_DATE, ACCOUNT_ID, COUNT(*)
FROM AAA.L1_ACCOUNTS
GROUP BY IDP_EFFECTIVE_DATE, ACCOUNT_ID HAVING COUNT(*)>1
LIMIT 100;
SELECT DEAL_NUM, COUNT(*)
FROM ABUHARI.L1_BMO16_BOOST_EXTRACT_TOR
GROUP BY DEAL_NUM HAVING COUNT(*)>1
LIMIT 100;
SELECT IDP_WAREHOUSE_ID, IDP_AUDIT_ID, ACCOUNT_KEY, COUNT(*)
FROM ACTIMIZE.L1_ACTIMIZE_US12_ACCOUNT
GROUP BY IDP_WAREHOUSE_ID, IDP_AUDIT_ID, ACCOUNT_KEY HAVING COUNT(*)>1
LIMIT 100;