首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于记录值的SQL Server查询

基于记录值的SQL Server查询
EN

Stack Overflow用户
提问于 2012-06-21 16:20:14
回答 2查看 80关注 0票数 1

我有以下数据结构:

代码语言:javascript
复制
P_ID    EVSSMIN EVSSMAX TDMIN   TDMAX   WARD    SYRINGE_ID   COMBINE_WITH   CUSTOM_CONCENTRATION
1003    0   20  125 250 2ZKG    1021038
    44444444    5
1003    20  60  125 250 2ZKG    1021037
    44444444    5

正常情况下,我使用以下查询作为结果。

查询1

代码语言:javascript
复制
SELECT * 
FROM [definities] 
WHERE 160 BETWEEN [TDMIN] AND [TDMAX] AND [WARD] = '2ZKG' AND [P_ID]=` 1003;

表中的最后一列可以包含大于0的值。上面是5。

通常,我想运行下面的查询,而不是上面的查询。

查询2

代码语言:javascript
复制
SELECT * FROM [definities] 
WHERE 160 BETWEEN [TDMIN] AND [TDMAX] 
AND CAST(160 as decimal) / [CUSTOM_CONCENTRATION]) BETWEEN EVSSMIN AND EVSMAX 
AND [WARD] = '2ZKG' -- AND [P_ID]= 1003;

正如您所看到的,查询通过将其除以CUSTOM_CONCENTRATION)值来计算值160。则它在EVVSMIN和EVSSMAX之间匹配,并且值160也在TDMIN和TDMAX之间匹配。通常,当CUSTOM_CONCENTRATION列包含大于0的值时,查询2将正常工作。

问题是,当CUSTOM_CONCENTRATION列不包含大于0的值时,查询就不能返回记录。这意味着必须修改查询,或者根据CUSTOM_CONCENTRATION值做一些修改。我可以在C#代码中解决这个问题,但更好的方法是通过查询来实现这一点,该查询根据值返回确切的记录,而不是需要迭代和使用if语句检查的多个记录。

EN

Stack Overflow用户

回答已采纳

发布于 2012-06-21 16:34:57

假设您希望在[CUSTOM_CONCENTRATION]值为零或更低时执行第一个查询,而在其他情况下执行第二个查询,则可以对这两个查询使用具有另一个限制的UNION ALL

代码语言:javascript
复制
SELECT * FROM [definities] 
WHERE 160 BETWEEN [TDMIN] AND [TDMAX] AND [WARD] = '2ZKG' AND [P_ID]=` 1003
AND [CUSTOM_CONCENTRATION] <= 0

UNION ALL

SELECT * FROM [definities] 
WHERE 160 BETWEEN [TDMIN] AND [TDMAX] 
AND CAST(160 as decimal) / [CUSTOM_CONCENTRATION]) BETWEEN EVSSMIN AND EVSMAX 
AND [WARD] = '2ZKG' -- AND [P_ID]= 1003
AND [CUSTOM_CONCENTRATION] > 0;

另一种更优雅的解决方案是:

代码语言:javascript
复制
SELECT * FROM [definities] 
WHERE 160 BETWEEN [TDMIN] AND [TDMAX] AND [WARD] = '2ZKG'
AND (([P_ID]=` 1003
      AND [CUSTOM_CONCENTRATION] <= 0)
     OR
     (CAST(160 as decimal) / [CUSTOM_CONCENTRATION]) BETWEEN EVSSMIN AND EVSMAX
      AND AND [CUSTOM_CONCENTRATION] > 0));
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11134179

复制
相关文章

相似问题

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