2011-11-13 3 views
1

Windows MobileのハンドセットでSQL Server Compact Edition 3.5で使用するSQLクエリを定義する作業を進めています。 3つのテーブルから結果セットを取得する必要があります。キー値のペアテーブルからの複数の列のクエリデータベース

私は自宅でこの質問をしているので、私はすべての列名を覚えていませんが、ここで私が扱っているテーブルの良い例です。

Table 1: Customers 
Table 2: PresoldOrders 
Table 3: CustomerDetails 

*

________________________________________ 
|          | 
|--------------- Customers --------------| 
|________________________________________| 
|          | 
| PK int   CustomerNumber | 
|  varchar(125) FirstName   | 
|  varchar(125) LastName   | 
|  varchar(125) Email    | 
|  varchar(200) Address1   | 
|  varchar(200) Address2   | 
|  varchar(200) City    | 
|  varchar(2)  State    | 
|  varchar(5)  Zip    | 
|________________________________________| 

*今*

________________________________________ 
|          | 
|------------ PresoldOrders -------------| 
|________________________________________| 
|          | 
| PK int   PresoldOrderId | 
| FK int   CustomerNumber | 
|  int   OrderNumber  | 
|  int   RouteStopNumber | 
|  datetime  DeliveryDate  | 
|  varchar(100) Other1   | 
|  varchar(100) Other2   | 
|________________________________________| 

________________________________________ 
|          | 
|------------ CustomerDetails -----------| 
|________________________________________| 
|          | 
| PK int   CustomerDetailsId | 
| FK int   CustomerNumber | 
|  varchar(255) FieldName   | 
|  varchar(255) FieldValue  | 
|________________________________________| 

、彼らが存在しない場合でも、顧客に存在するすべてのレコードを返す必要がありますクエリ'PresoldOrderHeaders'テーブルにあります。この部分はかなり簡単ですが、私はちょうど左外部結合を使用する予定です。クエリの2番目の部分はもう少し複雑です。

これまでに作成したクエリは次のとおりです。

SELECT c.CustomerNumber 
     c.FirstName 
     c.LastName 
     c.Email 
     c.Address1 
     c.Address2 
     c.City 
     c.State 
     c.Zip 
     po.OrderNumber 
     po.DeliveryDate 
     po.Other1 
     po.Other2 
FROM Customer c 
LEFT OUTER JOIN PresoldOrders po on c.CustomerNumber = po.CustomerNumber 
ORDER BY po.RouteStopNumber; 

トリッキーな部分はCustomerDetailsテーブルです。ここでIは成分の一つフレックスグリッドに表示される情報のためのいくつかのデータ

_________________________________________________________ 
|  |     |    |    | 
| PK | CustomerNumber | FieldName | FieldValue  | 
|-------|-----------------|--------------|----------------| 
| 1  | 1    | A   | 125   | 
|-------|-----------------|--------------|----------------| 
| 2  | 1    | B   | 126   | 
|-------|-----------------|--------------|----------------| 
| 3  | 1    | C   | 127   | 
|-------|-----------------|--------------|----------------| 
| 4  | 2    | A   | 138   | 
|-------|-----------------|--------------|----------------| 
| 5  | 2    | B   | 140   | 
|-------|-----------------|--------------|----------------| 
| 6  | 2    | C   | 143   | 
|-------|-----------------|--------------|----------------| 
|_________________________________________________________| 

の一例であり、フィールド名のCustomerDetailsテーブルにリストされて固定されます。ここで

は私がアーカイブしたいとします

_____________________________________________________________________________________________________________________ 
|     |   |   |  |      |      |       | 
| CustomerNumber | FirstName | LastName | ... | FieldName A's value | FieldName B's Value | FieldName C's Value  | 
|-----------------|-----------|----------|-----|---------------------|---------------------|--------------------------| 
| 1    | John  | Someone | ... | 125     | 126     | 127      | 
|-----------------|-----------|----------|-----|---------------------|---------------------|--------------------------| 
| 2    | Dan  | Other | ... | 138     | 140     | 143      | 
|-----------------|-----------|----------|-----|---------------------|---------------------|--------------------------| 
|_____________________________________________________________________________________________________________________| 

通常を、私はA、B、およびC「CustomerDetails」テーブルに定義されているの列名を持っていると思います。しかし、このテーブルは変更できませんので、私は与えられたもので作業する必要があります。私の仕事のための仕様の要件は、モバイル機器のグリッドに表示される15以上の列を持つことです。私が行くべきものではありませんが、それらは要件です。

[OK]を最後に、質問:

一つは、キー値のペアリングテーブルを照会するためにSQLを使用し、これらのキーの値のは、上記のように列に表示できますか?これは私が必要としていることであり、私はpresoldordersテーブルに自分のjoinで1つのクエリを作成し、リスト内の各顧客のすべての詳細のリストを取得し、ハンドヘルド。

+0

SQLクエリに多数のカンマがありません。 –

答えて

0

事前にすべてのキー値がわかっている場合は、結果セットをピボットできます。 SQLサーバーコンパクトがPIVOTをサポートしているかどうかはわかりませんが、できることは次のとおりです。 select CustomerNumber,
Max(Case when FieldName='A' then FieldValue end) as a_value,
// the same for B, C, all keys.
From CustomerDetails
Group by CustomerNumber

わかりやすくするために、他のテーブルには参加しませんが、列を列に変換する方法がわかりました。

関連する問題