求一sql语句

ecivilian 2003-05-12 05:33:01
库存表:
代码char) 类别ID(int) 数量(int)
零件表:
代码(char) 类别ID(int) 预警值(int) 名称(char)

类别ID+代码 构成一零件的唯一标识。

现要求求出所有库存量小于其预警值的零件(包括0库存),并根据库存量决定紧急程度(为预警值的0-40%:高;41%-70%:中;71%-99%:低),以紧急程度排序。

没有加入“紧急程度”时的语句大概是这样的:
select A.代码,A.配件别名,A.类别ID,A.预警值,B.数量 from 配件 A left join 库存 B on A.类别ID=B.类别ID and A.代码=B.代码
where (not exists (select * from 库存 C where A.类别ID=C.类别ID and A.代码=C.代码)) or (A.预警值>B.数量)
...全文
33 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
LengyuYuan 2003-05-13
  • 打赏
  • 举报
回复
可以使用ISNULL把NULL變為0
ecivilian 2003-05-13
  • 打赏
  • 举报
回复
谢谢CrazyFro,不过我后来也写出来了,是下面这样的。

select a.代码,a.类别ID,a.预警值,a.名称,b.数量 ,
(case
when (b.数量/a.预警值) is NULL then '高'
when cast(b.数量/a.预警值 as numeric(28,2) ) <=0.4 then '高'
when cast(b.数量/a.预警值 as numeric(28,2) ) >0.4 and cast(b.数量/a.预警值 as numeric(28,2) )<70 then '中'
when cast(b.数量/a.预警值 as numeric(28,2) ) >0.7 then '低'
end) as 等级
from 零件表 a left join 库存表 b on a.代码=b.代码 and a.类别ID=b.类别ID
where (a.预警值>b.数量) or (not exists(select * from 库存表 where a.代码=库存表.代码 and a.类别ID=库存表.类别ID))
CrazyFor 2003-05-12
  • 打赏
  • 举报
回复




select a.代码,a.类别ID,a.预警值,a.名称,b.数量 ,
(case
when cast(b.数量 numeric(28,2) /a.预警值 <=0.4 then '高'
when cast(b.数量 numeric(28,2) /a.预警值 >0.4 and cast(b.数量 numeric(28,2) /a.预警值<70 then '中'
when cast(b.数量 numeric(28,2) /a.预警值 >0.7 then '低'
end) as 等级
from 零件表 a left join 库存表 b on a.代码=b.代码 and a.类别ID=b.类别ID

ecivilian 2003-05-12
  • 打赏
  • 举报
回复
能帮我解决吗?主要是对于NULL时的处理。
ecivilian 2003-05-12
  • 打赏
  • 举报
回复
注:库存中有些零件可能数量为0,所以select语句选出来的记录可能会有数量=NULL的,像:

pjaaa1 3 10 0
pjaaa3 3 50 NULL
pjaab1 4 5 NULL

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧