好的,这是我原来的问题;
表一包含
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
似乎因为在表1中1000个记录中有11个颜色和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。谢谢!
答案 0 :(得分:0)
您正在寻找交叉表查询。您可以尝试使用交叉表查询向导:
http://msdn.microsoft.com/en-us/library/aa979431%28VS.71%29.aspx
答案 1 :(得分: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”(或类似其他颜色)