使用if标签根据实体中不同参数怎么实现这个sql
时间: 2024-03-27 19:41:25 浏览: 15
如果你想使用 MyBatis 中的 `<if>` 标签,根据不同的参数来动态生成 SQL 语句,可以参考以下代码实现:
```
<select id="getSalesData" resultMap="salesDataMap">
SELECT SUM(CASE WHEN DATE(order_time) = CURDATE() THEN order_amount ELSE 0 END) AS today_sales,
SUM(CASE WHEN DATE(order_time) = CURDATE() THEN refund_amount ELSE 0 END) AS today_refund,
SUM(CASE WHEN DATE(order_time) = CURDATE() THEN profit ELSE 0 END) AS today_profit,
SUM(CASE WHEN YEARWEEK(DATE(order_time),1) = YEARWEEK(CURDATE(),1) THEN order_amount ELSE 0 END) AS week_sales,
SUM(CASE WHEN YEARWEEK(DATE(order_time),1) = YEARWEEK(CURDATE(),1) THEN refund_amount ELSE 0 END) AS week_refund,
SUM(CASE WHEN YEARWEEK(DATE(order_time),1) = YEARWEEK(CURDATE(),1) THEN profit ELSE 0 END) AS week_profit,
SUM(CASE WHEN YEAR(order_time) = YEAR(CURDATE()) AND MONTH(order_time) = MONTH(CURDATE()) THEN order_amount ELSE 0 END) AS month_sales,
SUM(CASE WHEN YEAR(order_time) = YEAR(CURDATE()) AND MONTH(order_time) = MONTH(CURDATE()) THEN refund_amount ELSE 0 END) AS month_refund,
SUM(CASE WHEN YEAR(order_time) = YEAR(CURDATE()) AND MONTH(order_time) = MONTH(CURDATE()) THEN profit ELSE 0 END) AS month_profit,
SUM(CASE WHEN DATE(order_time) >= #{startDate} AND DATE(order_time) < #{endDate} THEN order_amount ELSE 0 END) AS date_range_sales,
SUM(CASE WHEN DATE(order_time) >= #{startDate} AND DATE(order_time) < #{endDate} THEN refund_amount ELSE 0 END) AS date_range_refund,
SUM(CASE WHEN DATE(order_time) >= #{startDate} AND DATE(order_time) < #{endDate} THEN profit ELSE 0 END) AS date_range_profit
FROM orders
WHERE store_id = #{storeId}
<if test="startTime != null and endTime != null">
AND DATE(order_time) >= #{startTime} AND DATE(order_time) < #{endTime}
</if>
<if test="startTime == null and endTime != null">
AND DATE(order_time) < #{endTime}
</if>
<if test="startTime != null and endTime == null">
AND DATE(order_time) >= #{startTime}
</if>
</select>
```
其中,#{storeId} 表示商店 ID,#{startDate} 和 #{endDate} 分别表示查询的开始日期和结束日期,#{startTime} 和 #{endTime} 分别表示查询的开始时间和结束时间。如果 startTime 和 endTime 都不为空,则查询指定日期段内的数据;如果 startTime 为空,endTime 不为空,则查询 endTime 之前的数据;如果 startTime 不为空,endTime 为空,则查询 startTime 之后的数据。在 SQL 语句中使用了 `<if>` 标签,根据不同的参数来动态生成查询条件。需要根据具体情况修改 orders 表名和字段名。