首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何进行查询以只获得值范围内有N个数字的结果?

如何进行查询以只获得值范围内有N个数字的结果?
EN

Stack Overflow用户
提问于 2015-08-11 10:48:21
回答 1查看 75关注 0票数 1

我正在尝试从美国农业部食品数据库中提取MS 2007中的营养数据,这些数据可以在http://www.ars.usda.gov/Services/docs.htm?docid=24912免费获得。

我需要有来自NUT_DATA.Nutr_No的所有营养的记录。这些记录的值介于“501”和“511”之间。但我希望排除那些价值缺失的不完整记录。

目前,婴儿食品香蕉的营养成分都在501到511之间,但婴儿食品饮料中只有9种营养成分,其他很多都是这样的。

作为最后的手段,我想,只要每个FOOD_DES.Long_Desc都有11条记录,每个NUT_DATA.Nutr_No或NUTR_DEF.NutrDesc都有一条记录(它们彼此对应),就可以接受所有记录,显示缺失值为null。

代码语言:javascript
复制
SELECT 
FOOD_DES.NDB_No,  FOOD_DES.FdGrp_Cd, FOOD_DES.Long_Desc, NUT_DATA.Nutr_No, NUTR_DEF.NutrDesc, NUT_DATA.Nutr_Val, WEIGHT.Amount, WEIGHT.Msre_Desc, WEIGHT.Gm_Wgt, [WEIGHT]![Amount] & " " & [WEIGHT]![Msre_Desc] AS msre

FROM 
NUTR_DEF inner JOIN ((FOOD_DES INNER JOIN NUT_DATA ON FOOD_DES.NDB_No=NUT_DATA.NDB_No) INNER JOIN WEIGHT ON FOOD_DES.NDB_No=WEIGHT.NDB_No) ON NUTR_DEF.Nutr_No=NUT_DATA.Nutr_No
WHERE 
   (NUT_DATA.Nutr_No between '501' and '511'  ) and ((WEIGHT.Seq)="1") and  NUT_DATA.Nutr_Val > '0' and

//这部分是我的想法尝试,但没有帮助

代码语言:javascript
复制
 EXISTS (SELECT 1
        FROM 
        NUTR_DEF inner JOIN ((FOOD_DES INNER JOIN NUT_DATA ON FOOD_DES.NDB_No=NUT_DATA.NDB_No) INNER JOIN WEIGHT ON FOOD_DES.NDB_No=WEIGHT.NDB_No) ON NUTR_DEF.Nutr_No=NUT_DATA.Nutr_No

            WHERE  count FOOD_DES.Long_Desc = "11"        )

//结束疯狂的实验

代码语言:javascript
复制
   ORDER BY FOOD_DES.Long_Desc, NUTR_DEF.SR_Order; 

这是一个数据样本。我只是抄袭了最重要的专栏。红色不是我要找的,因为它没有全部11种营养成分。如果有人认为这会有帮助的话,我可以把整个表格粘贴在谷歌文档上。

https://docs.google.com/spreadsheets/d/1FghDD59wy2PYlpsqUlYVc3Ulwvy4MMLagpBUYtvLBfI/edit?usp=sharing

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-11 14:01:32

作为你的出发点,确定哪种食物的所有11种营养物的值都>0。检查这个简单的GROUP BY查询是否显示了正确的项:

代码语言:javascript
复制
SELECT ndat.NDB_No
FROM
    NUT_DATA AS ndat
    INNER JOIN WEIGHT AS wt
    ON ndat.NDB_No = wt.NDB_No
WHERE
        ndat.Nutr_Val>0
    AND ndat.Nutr_No IN('501','502','503','504','505','506','507','508','509','510','511')
    AND wt.Seq='1'
GROUP BY ndat.NDB_No
HAVING Count(ndat.Nutr_No)=11;

注意,您可以使用Val(ndat.Nutr_No) Between 501 And 511作为Nutr_No限制,这将为您提供更简洁的声明。但是,评估表中每一行的Val()意味着该方法将放弃索引检索的性能优势。因此,查询的版本应该明显地慢一些。

保存该查询,并创建一个新的查询,该查询将其连接到基表中,以便从其他列获取所需的其他数据。或者将其用作子查询,而不是命名查询(如果您愿意)。

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

https://stackoverflow.com/questions/31939719

复制
相关文章

相似问题

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