我有一个针对挑库单的SQL语句,它返回订单的题头/详细信息记录。SQL中的一个字段基本上是表示是否有危险品的字段。如果订单上的单个产品有针对其的代码,则报告应显示其危险。
我遇到的问题是,在SQL结果中,因为我将报告中的代码放在标题部分(而不是详细信息部分),所以它只在第一行查找代码。
有没有办法通过SQL简单地说“如果这些行中的一行有这个代码,让所有这些行都有这个代码”?我猜subselect在这里会起作用。问题是,我使用的是一个基于FoxPro和SQL的遗留系统,太糟糕了!
编辑:刚刚选中并且我正在运行VFP8,SELECT语句中的子查询是在FVP9中添加的:(
发布于 2012-10-31 13:21:40
SELECT Header.HeaderId, Header.HeaderDescription,
Detail.DetailId, Detail.DetailDescription, Detail.Dangerous,
Danger.DangerousItems
FROM Header
INNER JOIN Detail ON Header.HeaderId = Detail.HeaderId
LEFT OUTER JOIN
(SELECT HeaderId, COUNT(*) AS DangerousItems FROM Detail WHERE Dangerous = 1 GROUP BY HeaderId) Danger ON Header.HeaderId = Danger.HeaderId如果Danger.DangerousItems >0,那么就有危险了。如果它是Null,那么没有什么是危险的。
如果您不能执行嵌套查询,那么您应该能够为嵌套的select创建一个类似视图的对象(在VFP8中称为query ):
SELECT HeaderId, COUNT(*) AS DangerousItems FROM Detail WHERE Dangerous = 1 GROUP BY HeaderId然后你能在那上面留下join吗?
发布于 2012-11-01 04:43:33
在VFP 8和更早版本中,最好的方法是连续使用三个查询:
SELECT Header.HeaderId,Header.HeaderDescription,Detail.DetailId,Detail.DetailDescription,Detail.Dangerous,Danger.DangerousItems FROM Header INNER JOIN Detail ON Header.HeaderId = Detail.HeaderId INTO CURSOR csrDetail
SELECT HeaderId,COUNT(*) AS DangerousItems FROM Detail WHERE csrDanger BY HeaderId INTO CURSOR csrDanger
SELECT csrDetail.*,csrDanger.DangerousItems FROM csrDetail.HeaderID = csrDanger.HeaderID INTO CURSOR csrResult
https://stackoverflow.com/questions/13150923
复制相似问题