发布
社区首页 >问答首页 >向group和having子句添加多个条件

向group和having子句添加多个条件
EN

Stack Overflow用户
提问于 2015-03-10 16:09:06
回答 1查看 3K关注 0票数 0

3I有以下查询

代码语言:javascript
代码运行次数:0
复制
SELECT deal_id, max(test_value) - min(test_value) AS deviation
  FROM  table
  WHERE run_date >= Dateadd(month, -4, Getdate())
  and test_alias='BOND_P' 
  group by deal_id
  having (max(test_value) - min(test_value)) BETWEEN 1.79 AND 4.5 

代码语言:javascript
代码运行次数:0
复制
     SELECT deal_id, max(test_value) - min(test_value) AS deviation
  FROM  ems.cdotests
  WHERE run_date >= Dateadd(month, -3, Getdate())
  and test_alias='CAA/CCC' 
  group by deal_id
  having (max(test_value) - min(test_value)) BETWEEN 2.79 AND 2

我需要将这个查询组合起来,这样我就可以将输出作为

代码语言:javascript
代码运行次数:0
复制
1: result set of query 1 intersected with result set of query 2
2: result set of query 1 unioned with result set of query 2

“‘Intersect”或“Union”将取决于传递给存储过程的参数

Ps注意:两个查询之间的运行日期条件可能是不同的,任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-10 16:56:02

代码语言:javascript
代码运行次数:0
复制
IF @myBitParameter = 0
  SELECT deal_id, max(test_value) - min(test_value) AS deviation
  FROM  [table]
  WHERE run_date >= Dateadd(month, -4, Getdate())
  and test_alias='BOND_P' 
  group by deal_id
  having (max(test_value) - min(test_value)) BETWEEN 1.79 AND 4.5 

  UNION ALL --or UNION, if you don't want duplicates

  SELECT deal_id, max(test_value) - min(test_value) AS deviation
  FROM  ems.cdotests
  WHERE run_date >= Dateadd(month, -3, Getdate())
  and test_alias='CAA/CCC' 
  group by deal_id
  having (max(test_value) - min(test_value)) BETWEEN 2.79 AND 2

ELSE
  SELECT deal_id, max(test_value) - min(test_value) AS deviation
  FROM  [table]
  WHERE run_date >= Dateadd(month, -4, Getdate())
  and test_alias='BOND_P' 
  group by deal_id
  having (max(test_value) - min(test_value)) BETWEEN 1.79 AND 4.5 

  INTERSECT

  SELECT deal_id, max(test_value) - min(test_value) AS deviation
  FROM  ems.cdotests
  WHERE run_date >= Dateadd(month, -3, Getdate())
  and test_alias='CAA/CCC' 
  group by deal_id
  having (max(test_value) - min(test_value)) BETWEEN 2.79 AND 2

我觉得应该有一个方法来做这个清洁剂与CTE的,但没有时间来愚弄它了。有人可以把这件事清理干净,或者找出一个更好的答案。

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

https://stackoverflow.com/questions/28968610

复制
相关文章

相似问题

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