0

わかりました、これが私の最初の質問です。

表 1 の内容

ID|Name  
1  Mary  
2  John  

表 2 の内容

ID|Color  
1  Red  
1  Blue
2  Blue  
2  Green  
2  Black  

で終わりたいです

ID|Name|Red|Blue|Green|Black  
1  Mary Y   Y  
2  John     Y     Y     Y

色には 11 の一意の値があり、表 1 には 1000 のレコードがあり、1000 から 1000 のレコードがあるため、これを行う「良い」方法はないようです。では、あと2つ質問です。

この結果を取得するための効率的なクエリ方法はありますか? 次に、アプリケーションでクロス集計を作成して、目的の結果を得ることができます。

ID|Name|Color  
1  Mary  Red  
1  Mary  Blue  
2  John  Blue  
2  John  Green  
2  John  Black

返されるレコードの数を制限したい場合、このようなことを行うためにクエリを実行するにはどうすればよいでしょうか?

Where ((color='blue') AND (color<>'red' OR color<>'green'))

したがって、上記の例を使用すると、元に戻ります

ID|Name|Color  
1  Mary  Blue  
2  John  Blue  
2  John  Black

SQL を使用するために、ADODB 経由で Visual FoxPro テーブルに接続します。ありがとう!

4

2 に答える 2

0

クロス集計クエリを作成しようとしています。クロス集計クエリウィザードの使用を試みることができます:http:
//msdn.microsoft.com/en-us/library/aa979431%28VS.71%29.aspx

于 2010-03-12T20:06:22.050 に答える
0

前の質問と VFP テーブルに対するクエリから、次の VFP 修飾クエリで結果を取得できます... クロス集計完了

select
      N.ID,
      N.Name,
      MAX( IIF( C.Color = "Red", "Y", " " )) Red,
      MAX( IIF( C.Color = "Blue", "Y", " " )) Blue,
      MAX( IIF( C.Color = "Green", "Y", " " )) Green,
      MAX( IIF( C.Color = "Black", "Y", " " )) Black
   FROM
      C_Names N,
      Colors C
   WHERE
      N.ID = C.ID
   GROUP BY 
      N.ID,
      N.Name

次に、他の「色」があるので、そのそれぞれの色の MAX( IIF()) をコピーし、その列を結果の列名として使用します...パターンに従います。唯一の問題は、大文字と小文字を区別する色のスペルが異なる場合、UPPER( C.Color ) = "RED" (または他の色についても同様) が必要になる場合があることです。

于 2010-03-12T20:34:39.870 に答える