说我有一个查询,该查询选择过去90天内的所有销售额。我希望能够根据情况/时间隔离某些行,并且不太清楚如何执行此操作。案例说明取决于日期,因此:如果日期介于3/1和5/31之间,那么我想从任何月末(3 / 31、4 / 30、5 / 31和TODAY)选择销售,如果日期不在3/1和5/31之间,那么我只想选择过去3个月底。
到目前为止,我一直尝试在WHERE子句中插入Case / When语句,但这似乎不符合要求。还有另一种解决方法吗?
供参考,@ monthends表包含以下单个列:
月底
和@insideRule表包含类似的内容:
insiderRule
查询:
<!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”周围的语法错误
答案 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';
这假定两个表具有相同的列,并且具有相同的顺序以及兼容的类型。