1

ここに画像の説明を入力してください

このトピックに名前を付ける方法すらわかりません。

これが私がやろうとしていることです。処理する必要のあるデータのセットがあり、同じフィールドのバージョンがいくつかある可能性があります。

たとえば、次の列を含むデータセットがあります。

FacilityName
FacilityAlias
TIN
TIN2
NPI
NPI2
NPI3
MailingAddress
MailingCity, State (they're given to me as 2 different fields but for my needs they're counted as 1)
MailingZIP
BillingAddress
Billing City, State
BillingZIP

最終的なデータセットには、以下の列のみが含まれます

FacilityName
TIN
NPI
Address
CityState
ZIP

ただし、フィールドの可能な組み合わせごとに行があることを確認する必要があるため、次のクエリを作成する必要があります。

INSERT INTO MATCH ( FacilityName, TIN, NPI, Address, CityState, ZIP) SELECT FacilityName, TIN, NPI. BillingAddress, BillingCityState, BillingZIP FROM MATCHPREP;

INSERT INTO MATCH ( FacilityName, TIN, NPI, Address, CityState, ZIP) SELECT FacilityAlias, TIN, NPI. BillingAddress, BillingCityState, BillingZIP FROM MATCHPREP;

INSERT INTO MATCH ( FacilityName, TIN, NPI, Address, CityState, ZIP) SELECT FacilityName, TIN, NPI. MailingAddress, MailingCityState, MailingZIP FROM MATCHPREP;

INSERT INTO MATCH ( FacilityName, TIN, NPI, Address, CityState, ZIP) SELECT FacilityName, TIN2, NPI. BillingAddress, BillingCityState, BillingZIP FROM MATCHPREP;

INSERT INTO MATCH ( FacilityName, TIN, NPI, Address, CityState, ZIP) SELECT FacilityAlias, TIN2, NPI. BillingAddress, BillingCityState, BillingZIP FROM MATCHPREP;

INSERT INTO MATCH ( FacilityName, TIN, NPI, Address, CityState, ZIP) SELECT FacilityName, TIN2, NPI. MailingAddress, MailingCityState, MailingZIP FROM MATCHPREP;

等々。

これはどのように行われますか?

4

4 に答える 4

0

質問の最後にある挿入例ですべての順列をカバーしており、NPI2 と NPI3 を NPI の順列として含める必要もないと思います。その場合、あなたが書いたようにいくつかの挿入が機能するはずですが、UNION を使用してこれらを単一の挿入ステートメントに結合する方が簡単です。

INSERT INTO MATCH ( FacilityName, TIN, NPI, Address, CityState, ZIP)
SELECT FacilityName, TIN, NPI. BillingAddress, BillingCityState, BillingZIP FROM MATCHPREP;
UNION
SELECT FacilityAlias, TIN, NPI. BillingAddress, BillingCityState, BillingZIP FROM MATCHPREP;
UNION 
SELECT FacilityName, TIN, NPI. MailingAddress, MailingCityState, MailingZIP FROM MATCHPREP;
etc.

または、質問を誤解していますか?

于 2013-03-20T00:41:30.163 に答える
0

私の理解が正しければ、7 つのフィールドのすべての可能な組み合わせが必要です。これには、次を使用しますcross join

select  FacilityName, TIN, NPI, Address, CityState, ZIP
from (select distinct FacilityName from matchprep) f cross join
     (select distinct TIN from matchprep) t cross join
     (select distinct NPI from matchprep) n cross join
     (select distinct Address from matchprep) a cross join
     (select distinct CityState from matchprep) c cross join
     (select distinct ZIP from matchprep) z
于 2013-03-20T00:31:00.523 に答える
0

なぜあなたがこれをしているのか100%わからないので、正確な答えを出すのは非常に困難です.

しかし、SQL を使用して複数の順列のセットを返す簡単な方法は、デカルト積を返すクエリを作成することです。

例: select a,b,c from (select 1 a union select 2 a union select 3 a) (select 10 b union select 20 b union select 30 b) (select 100 c union select 200 union select 300 c)

結合がないことに注意してください。サブクエリは、matchprep テーブルとは異なるクエリである可能性があります。この例では、結果は次のようになります

1,10,100
1,10,300
1,10,300
...
...
3,30,100
3,30,200
3,30,300 

その後、戻りデータ セットを挿入できます。

http://en.wikipedia.org/wiki/Cartesian_product

編集:

これはそれでなければなりません:)

select  
name, tin, npi, address, state, zip
from (select distinct name from (select FacilityName as name from matchprep 
    union select FacilityAlias as name from matchprep) f cross join
(select distinct tin (select TIN as tin from matchprep 
    union select TIN2 as tin from matchprep)) t cross join
 (select distinct NPI from matchprep) n cross join
 (select distinct address,state,zip from (select BillingAddress as address, BillingCityState as state, BillingZIP as zip from matchprep 
    union select MailingAddress as address, MailingCityState as state, MailingZIP as zip from matchprep)) a

挿入例に基づいて、郵送先住所の詳細と請求先住所の詳細は常に互いに異なります。

FacilityName と Alias は 1 つの順列になります。Tin と Tin2 は別のものになります。各 NPI のデカルト積が得られます。

于 2013-03-20T00:28:47.653 に答える
0

参考までに、以下は私が使用できたバージョンです

     SELECT A0.*
    ,a1.*
    ,a2.*
    ,a8.*
FROM (SELECT 'FacilityName' C1 FROM DUAL
      UNION
      SELECT 'TIN' FROM DUAL
      UNION
      SELECT 'NPI' FROM DUAL
      UNION
      SELECT 'Address' FROM DUAL) a0
    ,(SELECT 'FacilityName1' C2 FROM DUAL
      UNION
      SELECT 'TIN1' FROM DUAL
      UNION
      SELECT 'NPI1' FROM DUAL
      UNION
      SELECT 'Address1' FROM DUAL) a1
    ,(SELECT 'FacilityName2' C3 FROM DUAL
      UNION
      SELECT 'TIN2' FROM DUAL
      UNION
      SELECT 'NPI2' FROM DUAL
      UNION
      SELECT 'Address2' FROM DUAL) a2
    ,(SELECT 'FacilityName3' C4 FROM DUAL
      UNION
      SELECT 'TIN3' FROM DUAL
      UNION
      SELECT 'NPI3' FROM DUAL
      UNION
      SELECT 'Address3' FROM DUAL) a8
  WHERE   (   c1 LIKE 'FacilityName%'
       OR c2 LIKE 'FacilityName%'
       OR c3 LIKE 'FacilityName%'
       OR c4 LIKE 'FacilityName%')
     AND (   c1 LIKE 'TIN%'
       OR c2 LIKE 'TIN%'
       OR c3 LIKE 'TIN%'
       OR c4 LIKE 'TIN%')
     AND (   c1 LIKE 'NPI%'
       OR c2 LIKE 'NPI%'
       OR c3 LIKE 'NPI%'
       OR c4 LIKE 'NPI%')
     AND (   c1 LIKE 'Address%'
       OR c2 LIKE 'Address%'
       OR c3 LIKE 'Address%'
       OR c4 LIKE 'Address%')
于 2013-03-21T17:41:54.157 に答える