从同一数据集中选择2个日期集?

时间:2019-04-22 13:21:14

标签: sql sql-server

说我有一个查询,该查询选择过去90天内的所有销售额。我希望能够根据情况/时间隔离某些行,并且不太清楚如何执行此操作。案例说明取决于日期,因此:如果日期介于3/1和5/31之间,那么我想从任何月末(3 / 31、4 / 30、5 / 31和TODAY)选择销售,如果日期不在3/1和5/31之间,那么我只想选择过去3个月底。

到目前为止,我一直尝试在WHERE子句中插入Case / When语句,但这似乎不符合要求。还有另一种解决方法吗?

供参考,@ monthends表包含以下单个列:

月底

  • 2019-03-31
  • 2019-02-28
  • 2019-01-31

和@insideRule表包含类似的内容:

insiderRule

  • 2019-03-31
  • 2019-04-22

查询:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<body>

<select class="form-control" id="dropDown">
      <option id="n" value="0"> Тип N </option>
      <option id="p" value="1"> Тип P </option>
      <option id="c" value="2"> Тип C </option>
      <option id="v" value="3"> Тип V </option>
      <option id="t" value="4"> Тип T </option>
      <option id="s" value="5"> Тип S </option>
</select>

   <div>
      <label class="control-label">
          <span th:text="#{size}"></span>
      </label>
     <input id="size" type="text" class="form-control" />
   </div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
 <script th:inline="javascript">

  $('#dropdown').change(function() {
       if( $(this).val() === 1) {
           $('#size').props( 'disabled', false );
       } else {
            $('#size').props( 'disabled', true );

        }
    });

</script>
</body>
</html>

执行上述操作时,出现“ IN”周围的语法错误

2 个答案:

答案 0 :(得分:0)

您想要exists而不是case表达式:

IF EXISTS (SELECT 1 FROM mytable WHERE aasofdate BETWEEN '2019-03-01' AND '2019-05-31')
   SELECT *
   FROM @insideRule
   ELSE 
   SELECT * 
   FROM @monthends

答案 1 :(得分:0)

我认为您想要这样的东西:

SELECT ir.*
FROM @insideRule ir
WHERE getdate() >= '2019-03-01' AND
      getdate() < '2019-06-01'
UNION ALL
SELECT me.*
FROM @monthends me
WHERE getdate() < '2019-03-01' OR
      getdate() >= '2019-06-01';

这假定两个表具有相同的列,并且具有相同的顺序以及兼容的类型。