0

私は3つのテーブルを持っています:

  • クライアント
  • User_Defined_Definitions
  • ユーザー定義データ

Clients表には基本情報が含まれています。

ClientID, Name, Address...

User_Defined_Definitionsには、ユーザー定義フィールドのタイトルがあります。

StartDate, SalesRep, Website...

次に、User_Defined_Dataテーブルには、クライアント テーブル内の各クライアントのフィールドに入力するデータが含まれます。

User_Defined_Data必要なすべてのデータを取得するクエリを作成しましたが、そのクライアントに存在する行ごとに 1 つの行を取得します。私がやりたいことは、クライアントごとに 1 つの行を取得し、すべてのユーザー定義フィールドを 1 つの行に入力するために必要な数の列を追加することです。

ClientID Name   Address     Description Data
155555   Calvin 123 Fake St StartDate   10/10/2013
155555   Calvin 123 Fake St SalesRep    Tom
155555   Calvin 123 Fake St Website     http://www.fakesite.com
155556   Steve  456 Root Rd StartDate   8/5/2013
155557   Kathy  715 Main St StartDate   5/5/2010
155557   Kathy  715 Main St SalesRep    Jessica
155557   Kathy  715 Main St Website     http://www.fakesite2.com
155558   Jenny  345 Fake St StartDate   9/9/2012
155558   Jenny  345 Fake St Website     http://www.fakesite3.com

最初の 3 つの列はClientテーブルから取得されます。Description列はテーブルから取得されますUser_Defined_Definitions。そして、テーブルDataから来User_Defined_Dataます。

そして、私はこれに似たものを見たいです

ClientID    Name    Address StartDate   SalesRep    Website
155555  Calvin  123 Fake St 10/10/2013  Tom         http://www.fakesite.com
155556  Steve   456 Root Rd 8/5/2013        
155557  Kathy   715 Main St 5/5/2010    Jessica     http://www.fakesite2.com
155558  Jenny   345 Fake St 9/9/2012                http://www.fakesite3.com

SQLを使用してこれが可能であることは知っていますが、通常、エクスポート後にデータを処理するスクリプトを作成しました。ただし、今回は Access で実行できるようにする必要があるため、2 か月後にテーブルを再度開くことができ、同じ方法でデータを再クエリできます。

適切な結果を得るために他に提供できることがあれば教えてください。

アドオン

私は長い道のりを歩み、UDF ごとに個別のクエリを作成し、それぞれに対してクエリを実行してすべてを 1 行にまとめて統合しました。SQL を使用してこれを行う方法についてはまだ興味があります。現在、組織の CRM および会計ソフトウェアを変更している最中であり、困難な作業になっているからです。

上記のように、UDF を別々の行にプルするために使用していたクエリを次に示します。

SELECT dbo_AMGR_Client_Tbl.Client_Id, dbo_AMGR_Client_Tbl.Name,
dbo_AMGR_Client_Tbl.Address_Line_1, dbo_AMGR_Client_Tbl.Address_Line_2, 
dbo_AMGR_Client_Tbl.City, dbo_AMGR_Client_Tbl.State_Province, 
dbo_AMGR_Client_Tbl.Zip_Code, dbo_AMGR_User_Field_Defs_Tbl.Description, 
dbo_AMGR_User_Fields_Tbl.DateCol, dbo_AMGR_User_Fields_Tbl.NumericCol, 
dbo_AMGR_User_Fields_Tbl.AlphaNumericCol
FROM dbo_AMGR_User_Field_Defs_Tbl INNER JOIN (dbo_AMGR_Client_Tbl INNER JOIN 
dbo_AMGR_User_Fields_Tbl ON dbo_AMGR_Client_Tbl.Client_Id = 
dbo_AMGR_User_Fields_Tbl.Client_Id) ON (dbo_AMGR_User_Field_Defs_Tbl.Type_Id = 
dbo_AMGR_User_Fields_Tbl.Type_Id) AND (dbo_AMGR_User_Field_Defs_Tbl.Code_Id = 
dbo_AMGR_User_Fields_Tbl.Code_Id)
GROUP BY dbo_AMGR_Client_Tbl.Name_Type, dbo_AMGR_Client_Tbl.Client_Id, 
dbo_AMGR_Client_Tbl.Name, dbo_AMGR_Client_Tbl.Address_Line_1, 
dbo_AMGR_Client_Tbl.Address_Line_2, dbo_AMGR_Client_Tbl.City, 
dbo_AMGR_Client_Tbl.State_Province, dbo_AMGR_Client_Tbl.Zip_Code, 
dbo_AMGR_User_Field_Defs_Tbl.Description, dbo_AMGR_User_Fields_Tbl.DateCol, 
dbo_AMGR_User_Fields_Tbl.NumericCol, dbo_AMGR_User_Fields_Tbl.AlphaNumericCol
HAVING (((dbo_AMGR_Client_Tbl.Name_Type)="C") AND ((dbo_AMGR_Client_Tbl.Name) Not Like "*HOUSE*"))
ORDER BY dbo_AMGR_Client_Tbl.Name;
4

1 に答える 1