首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL-如果某一行具有列值,则使所有行都显示该列值

SQL-如果某一行具有列值,则使所有行都显示该列值
EN

Stack Overflow用户
提问于 2012-10-31 11:38:44
回答 2查看 1.5K关注 0票数 1

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

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

有没有办法通过SQL简单地说“如果这些行中的一行有这个代码,让所有这些行都有这个代码”?我猜subselect在这里会起作用。问题是,我使用的是一个基于FoxPro和SQL的遗留系统,太糟糕了!

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

EN

回答 2

Stack Overflow用户

发布于 2012-10-31 13:21:40

代码语言:javascript
运行
复制
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 ):

代码语言:javascript
运行
复制
SELECT HeaderId, COUNT(*) AS DangerousItems FROM Detail WHERE Dangerous = 1 GROUP BY HeaderId

然后你能在那上面留下join吗?

票数 0
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13150923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档