修改为先将区间价格和计费区间为0和空的排除
时间: 2024-03-03 11:49:20 浏览: 9
好的,修改后的 SQL 语句如下:
```
CREATE TABLE 订单统计原单号获取结算价格 (
ID INT,
区间价格 DECIMAL(10, 2) GENERATED ALWAYS AS (
CASE
WHEN 收费重量 != '' AND 收费重量 IS NOT NULL THEN
CASE
WHEN 收费重量 <= 重量第一计费区间值 THEN 重量第一计费区间价格
WHEN 收费重量 <= 重量第二计费区间值 THEN 重量第二计费区间价格
WHEN 收费重量 <= 重量第三计费区间值 THEN 重量第三计费区间价格
ELSE 重量第四计费区间价格
END
ELSE NULL
END
) WHERE 收费重量 != '' AND 收费重量 IS NOT NULL;
```
这个修改后的 SQL 语句在创建表时,使用 WHERE 子句过滤掉收费重量为空的数据行,并使用 GENERATED ALWAYS AS 语句计算出区间价格。这样可以确保只有收费重量不为空的数据行才会在表中生成区间价格。
相关问题
去掉重量第一计费区间值 和 重量第一计费区间价格的空值和0值
如果要去掉重量第一计费区间值和重量第一计费区间价格的空值和0值,并且根据实际重量判断在哪个计费区间,并且取对应的区间价格,可以使用以下SQL查询语句:
```
SELECT
CASE
WHEN 实际重量 <= 重量第一计费区间值 THEN 重量第一计费区间价格
WHEN 实际重量 <= 重量第二计费区间值 THEN 重量第二计费区间价格
-- 继续添加条件,直到第十个计费区间
ELSE NULL -- 如果实际重量大于所有计费区间值,则返回 NULL
END AS 区间价格
FROM 数据表名
WHERE 实际重量 IS NOT NULL -- 过滤空值
AND 实际重量 > 0 -- 过滤0值
AND 重量第一计费区间值 IS NOT NULL -- 过滤空值
AND 重量第一计费区间值 > 0 -- 过滤0值
AND 重量第一计费区间价格 IS NOT NULL -- 过滤空值
AND 重量第一计费区间价格 > 0 -- 过滤0值
AND 其他条件; -- 可以添加其他查询条件,如订单编号、时间等
```
在上述查询语句中,除了过滤空值和0值的条件外,新增了对重量第一计费区间值和重量第一计费区间价格的过滤条件。这样查询结果中就不会包含空值和0值了。
加一个判断取值区间不为0或空的最大值
你可以在 SQL 语句中增加一个判断条件,判断取值区间不为0或空的最大值是否存在,如果存在则使用该值作为区间价格。可以像下面这样修改 SQL 语句:
```
CREATE TABLE 订单统计原单号获取结算价格值 (
ID,
(CASE
WHEN 收费重量 != '' AND 收费重量 IS NOT NULL AND (重量第一计费区间价格 != 0 OR 重量第二计费区间价格 != 0 OR 重量第三计费区间价格 != 0 OR 重量第四计费区间价格 != 0) THEN
CASE
WHEN 收费重量 <= 重量第一计费区间值 THEN 重量第一计费区间价格
WHEN 收费重量 <= 重量第二计费区间值 THEN 重量第二计费区间价格
WHEN 收费重量 <= 重量第三计费区间值 THEN 重量第三计费区间价格
WHEN 收费重量 > 重量第三计费区间值 AND 重量第四计费区间价格 != 0 THEN 重量第四计费区间价格
ELSE NULL
END
ELSE NULL
END) as 区间价格
FROM 订单统计原单号获取结算价格
WHERE (重量第一计费区间价格 != 0 OR 重量第二计费区间价格 != 0 OR 重量第三计费区间价格 != 0 OR 重量第四计费区间价格 != 0) AND 收费重量 != '' AND 收费重量 IS NOT NULL;
```
这样修改后,当收费重量大于最大计费区间值且最大计费区间价格不为零时,会使用最大计费区间价格作为区间价格。