0

私の要件はこれです:

クエリで渡される PROJECTNAME について、テーブル PSPROJECTITEM から重複を見つける必要があります。目的は、作成されたバックアップがある場合、または移行中に発生する重複プロジェクトを見つけることです。行の重複は 2 つのプロジェクト間でチェックする必要があり、objecttype、objectid1 などの類似したオブジェクトがあり、これらのオブジェクトの数が一致する場合、それらは重複しています。

私の問題は、私が書いたクエリが追加の重複を拾うことです。

SELECT a.PROJECTNAME 
 , a.OBJECTTYPE 
 , a.OBJECTID1 
 , a.OBJECTVALUE1 
 , a.OBJECTID2 
 , a.OBJECTVALUE2 
 , a.OBJECTID3 
 , a.OBJECTVALUE3 
 , a.OBJECTID4 
 , a.OBJECTVALUE4,
 COUNT(*) as duplicate
  FROM PSPROJECTITEM a 
 WHERE a.projectname <> 'AZ_11' and
       exists ( 
 SELECT *
  FROM PSPROJECTITEM c 
 WHERE c.projectname  = 'AZ_11' 
   and a.objecttype = c.objecttype 
   AND a.objectid1 =c.objectid1 
   AND a.objectvalue1 = c.objectvalue1 
   AND a.objectid2 = c.objectid2 
   AND a.objectvalue2 = c.objectvalue2 
   AND a.objectid3 = c.objectid3 
   AND a.objectvalue3 = c.objectvalue3 
   AND a.objectid4 = c.objectid4 
   AND a.objectvalue4 = c.objectvalue4) 
   group by a.PROJECTNAME 
 , a.OBJECTTYPE 
 , a.OBJECTID1 
 , a.OBJECTVALUE1 
 , a.OBJECTID2 
 , a.OBJECTVALUE2 
 , a.OBJECTID3 
 , a.OBJECTVALUE3 
 , a.OBJECTID4 
 , a.OBJECTVALUE4
  ORDER BY a.projectname

照合はオブジェクトに基づいて行う必要があり、複製は同じオブジェクトを持ち、オブジェクトの数も一致するものです。

レコード PSPROJECTITEM 内のプロジェクト名の重複は

A_RP    7   10  AZ_EP_DASHBOARD 39  GBL 0       0    
A_RP    46  10  AZ_EP_DASHBOARD 39  GBL 12  PostBuild   0    
A_RP    46  10  AZ_EP_DASHBOARD 39  GBL 12  PreBuild    0    
A_RP    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_ACCEPTED       FieldChange
A_RP    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_ACCPTRQST_LINK FieldChange
A_RP    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_ADD_PEER       FieldChange
A_RP    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_ALL_REQUESTS   FieldChange
A_RP    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_COMPLETED      FieldChange
A_RP    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DASH_RTNXFR_OK FieldChange
A_RP    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DECLINED       FieldChange
A_RP    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DELETE_ROW     FieldChange
A_RP    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DELETE_ROW2    FieldChange
A_RP    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DEL_NO         FieldChange

このクエリは、次の値もフェッチします。

AZ_ASH_DASHBOARD    7   10  AZ_EP_DASHBOARD 39  GBL 0       0    
AZ_ASH_DASHBOARD    46  10  AZ_EP_DASHBOARD 39  GBL 12  PostBuild   0    
AZ_ASH_DASHBOARD    46  10  AZ_EP_DASHBOARD 39  GBL 12  PreBuild    0    
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_ACCEPTED       FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_ADD_PEER       FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_COMPLETED      FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DECLINED       FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DELETE_ROW     FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DELETE_ROW2    FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DEL_NO         FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DEL_YES        FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DRILLDOWN_BTN  FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DRILLTOP_BTN   FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DRILLUP_BTN    FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_EERVW_ACTION   FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_EP_ACCEPT      FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_EP_DECLINE     FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_EP_FDBCK_LINK  FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_EP_OLD_RVW_LINKFieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_GOALS_ACTION   FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_MANAGE_FDBCK   FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_MGRRVW_ACTION  FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_NOMINATED      FieldChange
AZ_ASH_DASHBOARD    48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_NOTIFY_PB      FieldChange

つまり、これらは付加価値であり、これらとは別に、追加の価値はこのようなものです。

クエリで渡されるプロジェクトの複製を取得するために、このクエリを完璧にするのを手伝ってください。

使用中のデータベースはオラクルです。

これはの結果です

select * from PSPROJECTITEM where PROJECTNAME = 'AZ_11';

列名:

PROJECTNAME OBJECTID1 OBJECTVALUE1 OBJECTID2 OBJECTVALUE2 OBJECTID3 OBJECTVALUE3 OBJECTID4 OBJECTVALUE4

AZ_11   7   10  AZ_EP_DASHBOARD 39  GBL 0       0    
AZ_11   46  10  AZ_EP_DASHBOARD 39  GBL 12  PostBuild   0    
AZ_11   46  10  AZ_EP_DASHBOARD 39  GBL 12  PreBuild    0    
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_ACCEPTED       FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_ACCPTRQST_LINK FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_ADD_PEER       FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_ALL_REQUESTS   FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_COMPLETED      FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DASH_RTNXFR_OK FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DECLINED       FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DELETE_ROW     FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DELETE_ROW2    FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DEL_NO         FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DEL_YES        FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DRILLDOWN_BTN  FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DRILLTOP_BTN   FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_DRILLUP_BTN    FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_EERVW_ACTION   FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_EP_ACCEPT      FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_EP_DASH_CANCEL FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_EP_DECLINE     FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_EP_FDBCK_LINK  FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_EP_OLD_RVW_LINKFieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_GIVEACCPT_FDBCKFieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_GIVE_FDBCK     FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_GL_CREATE_LINK FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_GL_CREATE_MGR  FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_GL_LIST_LINK   FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_GL_LIST_MGR    FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_GOALS_ACTION   FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_MANAGE_FDBCK   FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_MGRRVW_ACTION  FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_NOMINATED      FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_NOTIFY_PB      FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_PCS_LINK       FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_PENDING        FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_REQUEST_FDBCK  FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_REQUEST_FDBCKS FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_REVIEW_ACTION  FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_RQST_FDBCK     FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_TOTAL_REQUESTS FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_TRANSFER_LINK  FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_EP_DASH_WRK  2   AZ_UNSOLICITED    FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_FDBCK_WRK    2   AZ_ARCHIVE_FLG    FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_FDBCK_WRK    2   AZ_CANCEL         FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_FDBCK_WRK    2   AZ_FBFILTER       FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_FDBCK_WRK    2   AZ_FB_COMPL_LINK  FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_FDBCK_WRK    2   AZ_FB_RQST_LINK   FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_FDBCK_WRK    2   AZ_REWORK_PB      FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_FDBCK_WRK    2   AZ_SUBMIT_LINK    FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_FDBCK_WRK    2   RETURN_LINK       FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_FDBCK_WRK    2   SELECT_ALL        FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_FDBCK_WRK    2   TOGGLE1           FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_GOALS_WRK    2   AZ_CANCEL         FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_GOALS_WRK    2   AZ_COPY           FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_GOALS_WRK    2   AZ_COPY_LINK      FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_GOALS_WRK    2   AZ_EDIT_LINK      FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_GOALS_WRK    2   AZ_GL_CREATE_LINK FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_GOALS_WRK    2   AZ_GOAL_FILTER    FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_GOALS_WRK    2   AZ_GOAL_FILTER1   FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_GOALS_WRK    2   AZ_GOAL_FILTER2   FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_GOALS_WRK    2   AZ_GOAL_FILTER3   FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_GOALS_WRK    2   AZ_GOAL_FILTER4   FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   AZ_GOALS_WRK    2   AZ_SELECT_ALL     FieldChange
AZ_11   48  10  AZ_EP_DASHBOARD 39  GBL 1   DERIVED_PSS 2   SEARCH_BTN        FieldChange

また、情報が不足している場合はお知らせください。

これは、重複をテストするために使用されているクエリです。

(SELECT COUNT(*) FROM PSPROJECTITEM
WHERE PROJECTNAME='AZ_11'
minus
SELECT COUNT(*) FROM PSPROJECTITEM
WHERE PROJECTNAME='A_RP') 
union all
( 
 SELECT COUNT(*) FROM PSPROJECTITEM
WHERE PROJECTNAME='A_RP'
minus
SELECT COUNT(*) FROM PSPROJECTITEM
WHERE PROJECTNAME='AZ_11'
);

このため、空白行を返します。

これらの値で実行すると:

(SELECT COUNT(*) FROM PSPROJECTITEM
WHERE PROJECTNAME='AZ_11'
minus
SELECT COUNT(*) FROM PSPROJECTITEM
WHERE PROJECTNAME='AZ_ASH_DASHBOARD ') 
union all
( 
 SELECT COUNT(*) FROM PSPROJECTITEM
WHERE PROJECTNAME='AZ_ASH_DASHBOARD '
minus
SELECT COUNT(*) FROM PSPROJECTITEM
WHERE PROJECTNAME='AZ_11'
);

これは以下を返します:

65
0

つまり、オブジェクトが一致しないため、これらは重複プロジェクトではありません。

これを乗り越えるのを手伝ってください。これは非常に複雑で、アイデアがありません。

4

1 に答える 1

1

私が正しく理解していれば、プロジェクトは重複としてカウントされ、他のプロジェクトと同じ行数になります。たとえば、次のように、サブクエリにこの条件を追加してみてください。

SELECT a.PROJECTNAME 
 , a.OBJECTTYPE 
 , a.OBJECTID1 
 , a.OBJECTVALUE1 
 , a.OBJECTID2 
 , a.OBJECTVALUE2 
 , a.OBJECTID3 
 , a.OBJECTVALUE3 
 , a.OBJECTID4 
 , a.OBJECTVALUE4,
 COUNT(*) as duplicate
  FROM PSPROJECTITEM a 
 WHERE a.projectname <> 'AZ_11' and
       exists ( 
 SELECT *
  FROM PSPROJECTITEM c 
 WHERE c.projectname  = 'AZ_11' 
   and a.objecttype = c.objecttype 
   AND a.objectid1 =c.objectid1 
   AND a.objectvalue1 = c.objectvalue1 
   AND a.objectid2 = c.objectid2 
   AND a.objectvalue2 = c.objectvalue2 
   AND a.objectid3 = c.objectid3 
   AND a.objectvalue3 = c.objectvalue3 
   AND a.objectid4 = c.objectid4 
   AND a.objectvalue4 = c.objectvalue4) 
   AND (SELECT COUNT(*) FROM PSPROJECTITEM d
   WHERE d.projectname = a.projectname) = 
   (SELECT COUNT(*) FROM PSPROJECTITEM e
   WHERE e.projectname = 'AZ_11')
   group by a.PROJECTNAME 
 , a.OBJECTTYPE 
 , a.OBJECTID1 
 , a.OBJECTVALUE1 
 , a.OBJECTID2 
 , a.OBJECTVALUE2 
 , a.OBJECTID3 
 , a.OBJECTVALUE3 
 , a.OBJECTID4 
 , a.OBJECTVALUE4
  ORDER BY a.projectname

また、このクエリはこの結果を返すと思います。これは、プロジェクト 'AZ_ASH_DASHBOARD' の名前の末尾に空白があるためです。

(SELECT COUNT(*) FROM PSPROJECTITEM
WHERE PROJECTNAME='AZ_11'
minus
SELECT COUNT(*) FROM PSPROJECTITEM
WHERE PROJECTNAME='AZ_ASH_DASHBOARD ') 
union all
( 
 SELECT COUNT(*) FROM PSPROJECTITEM
WHERE PROJECTNAME='AZ_ASH_DASHBOARD '
minus
SELECT COUNT(*) FROM PSPROJECTITEM
WHERE PROJECTNAME='AZ_11'
);
于 2013-06-19T08:53:06.923 に答える