1

我有一个 PICK 表的 SQL 语句,它返回订单的标题/详细信息记录。SQL中的一个字段基本上就是一个字段,说是否有危险品。如果订单上的单个产品有代码,则报告应显示其危险。

我遇到的问题是在 SQL 结果中,因为我将代码放在标题部分(而不是详细信息部分)的报告中,所以它只在第一行查找代码。

有没有办法通过 SQL 基本上说“如果其中一行有这个代码,让所有这些行都有这个代码”?我猜一个子选择会在这里工作......问题是,我使用的是基于 FoxPro 的遗留系统,而 FoxPro SQL 太糟糕了!

编辑:刚刚检查并且我正在运行 VFP8,SELECT 语句中的子查询已添加到 FVP9 中:(

4

2 回答 2

0

在 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 Dangerous GROUP BY HeaderId INTO CURSOR csrDanger

选择 csrDetail.*, csrDanger.DangerousItems 从 csrDetail.HeaderID = csrDanger.HeaderID 到 CURSOR csrResult

于 2012-10-31T20:43:33.050 回答
0
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,那么没有什么是危险的。

如果您不能进行嵌套查询,那么您应该能够为嵌套选择创建一个类似视图的对象(在 VFP8 中称为查询):

SELECT HeaderId, COUNT(*) AS DangerousItems FROM Detail WHERE Dangerous = 1 GROUP BY HeaderId

然后你可以离开加入吗?

于 2012-10-31T05:21:40.397 回答