0

好的,这是我最初的问题;

表一包含

ID|Name  
1  Mary  
2  John  

表二包含

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 个颜色的唯一值和 1000 条记录的 1000 条记录,所以没有“好”的方法来做到这一点。所以,还有两个问题。

有没有一种有效的查询方法来获得这个结果?然后我可以在我的应用程序中创建一个交叉表以获得所需的结果。

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

我通过 ADODB 连接到 Visual FoxPro 表以使用 SQL。谢谢!

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 回答