ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2865|回复: 3

[求助] sql通过定义变量简化

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-12-13 16:08 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
下面代码里的颜色部分希望有一个变量替代:
SELECT scd.标记1,scd.生产单号,cpbm.分类,scd.产品编码,scd.描述,scd.材料,scd.颜色,scd.下单数量,scd.生产分厂,scd.单价,scd.总金额 as 产值,
cpgzde.配料单价,
cpgzde.配料单价*case when cpbm.分类 ='C' or cpbm.分类 ='C2' then
        case when scd.下单数量<=40 then 2
                 when scd.下单数量>40 and scd.下单数量<=60 then 80
                 when scd.下单数量>60 and scd.下单数量<=80 then 1.3
                 when scd.下单数量>80 and scd.下单数量<=104 then 104
                 when scd.下单数量>104 and scd.下单数量<=200 then 1
                 when scd.下单数量>200 and scd.下单数量<=1000 then 200
                 when scd.下单数量>1000  then 0.95 end
else
        case when scd.下单数量<=10 then 2
                 when scd.下单数量>10 and scd.下单数量<=15 then 20
                 when scd.下单数量>15 and scd.下单数量<=20 then 1.3
                 when scd.下单数量>20 and scd.下单数量<=26 then 26
                 when scd.下单数量>26 and scd.下单数量<=50 then 1
                 when scd.下单数量>50 and scd.下单数量<=55 then 50
                 when scd.下单数量>55 and scd.下单数量<=85 then 0.9
                 when scd.下单数量>85 and scd.下单数量<=90 then 77
                 when scd.下单数量>90 and scd.下单数量<=150 then 0.85
                 when scd.下单数量>150 and scd.下单数量<=160 then 128
                 when scd.下单数量>160  then 0.8 end
end  
as 配料工资,
cpgzde.机加单价,
cpgzde.机加单价*case when cpbm.分类 ='C' or cpbm.分类 ='C2' then
        case when scd.下单数量<=40 then 2
                 when scd.下单数量>40 and scd.下单数量<=60 then 80
                 when scd.下单数量>60 and scd.下单数量<=80 then 1.3
                 when scd.下单数量>80 and scd.下单数量<=104 then 104
                 when scd.下单数量>104 and scd.下单数量<=200 then 1
                 when scd.下单数量>200 and scd.下单数量<=1000 then 200
                 when scd.下单数量>1000  then 0.95 end
else
        case when scd.下单数量<=10 then 2
                 when scd.下单数量>10 and scd.下单数量<=15 then 20
                 when scd.下单数量>15 and scd.下单数量<=20 then 1.3
                 when scd.下单数量>20 and scd.下单数量<=26 then 26
                 when scd.下单数量>26 and scd.下单数量<=50 then 1
                 when scd.下单数量>50 and scd.下单数量<=55 then 50
                 when scd.下单数量>55 and scd.下单数量<=85 then 0.9
                 when scd.下单数量>85 and scd.下单数量<=90 then 77
                 when scd.下单数量>90 and scd.下单数量<=150 then 0.85
                 when scd.下单数量>150 and scd.下单数量<=160 then 128
                 when scd.下单数量>160  then 0.8 end
end  
as 机加工资,
cpgzde.砂光单价,
cpgzde.砂光单价*case when cpbm.分类 ='C' or cpbm.分类 ='C2' then
        case when scd.下单数量<=40 then 2
                 when scd.下单数量>40 and scd.下单数量<=60 then 80
                 when scd.下单数量>60 and scd.下单数量<=80 then 1.3
                 when scd.下单数量>80 and scd.下单数量<=104 then 104
                 when scd.下单数量>104 and scd.下单数量<=200 then 1
                 when scd.下单数量>200 and scd.下单数量<=1000 then 200
                 when scd.下单数量>1000  then 0.95 end
else
        case when scd.下单数量<=10 then 2
                 when scd.下单数量>10 and scd.下单数量<=15 then 20
                 when scd.下单数量>15 and scd.下单数量<=20 then 1.3
                 when scd.下单数量>20 and scd.下单数量<=26 then 26
                 when scd.下单数量>26 and scd.下单数量<=50 then 1
                 when scd.下单数量>50 and scd.下单数量<=55 then 50
                 when scd.下单数量>55 and scd.下单数量<=85 then 0.9
                 when scd.下单数量>85 and scd.下单数量<=90 then 77
                 when scd.下单数量>90 and scd.下单数量<=150 then 0.85
                 when scd.下单数量>150 and scd.下单数量<=160 then 128
                 when scd.下单数量>160  then 0.8 end
end  
as 砂光工资,
cpgzde.组装单价,
cpgzde.组装单价*case when cpbm.分类 ='C' or cpbm.分类 ='C2' then
        case when scd.下单数量<=40 then 2
                 when scd.下单数量>40 and scd.下单数量<=60 then 80
                 when scd.下单数量>60 and scd.下单数量<=80 then 1.3
                 when scd.下单数量>80 and scd.下单数量<=104 then 104
                 when scd.下单数量>104 and scd.下单数量<=200 then 1
                 when scd.下单数量>200 and scd.下单数量<=1000 then 200
                 when scd.下单数量>1000  then 0.95 end
else
        case when scd.下单数量<=10 then 2
                 when scd.下单数量>10 and scd.下单数量<=15 then 20
                 when scd.下单数量>15 and scd.下单数量<=20 then 1.3
                 when scd.下单数量>20 and scd.下单数量<=26 then 26
                 when scd.下单数量>26 and scd.下单数量<=50 then 1
                 when scd.下单数量>50 and scd.下单数量<=55 then 50
                 when scd.下单数量>55 and scd.下单数量<=85 then 0.9
                 when scd.下单数量>85 and scd.下单数量<=90 then 77
                 when scd.下单数量>90 and scd.下单数量<=150 then 0.85
                 when scd.下单数量>150 and scd.下单数量<=160 then 128
                 when scd.下单数量>160  then 0.8 end
end  
as 组装工资,
cpgzde.油漆单价,case when scd.生产分厂 = 'N2' then 1.5 when scd.生产分厂 = 'N3' and cpbm.分类 = 'T' then 1.5 else 1 end as 油漆系数,
cpgzde.油漆单价*case when cpbm.分类 ='C' or cpbm.分类 ='C2' then
        case when scd.下单数量<=40 then 2
                 when scd.下单数量>40 and scd.下单数量<=60 then 80
                 when scd.下单数量>60 and scd.下单数量<=80 then 1.3
                 when scd.下单数量>80 and scd.下单数量<=104 then 104
                 when scd.下单数量>104 and scd.下单数量<=200 then 1
                 when scd.下单数量>200 and scd.下单数量<=1000 then 200
                 when scd.下单数量>1000  then 0.95 end
else
        case when scd.下单数量<=10 then 2
                 when scd.下单数量>10 and scd.下单数量<=15 then 20
                 when scd.下单数量>15 and scd.下单数量<=20 then 1.3
                 when scd.下单数量>20 and scd.下单数量<=26 then 26
                 when scd.下单数量>26 and scd.下单数量<=50 then 1
                 when scd.下单数量>50 and scd.下单数量<=55 then 50
                 when scd.下单数量>55 and scd.下单数量<=85 then 0.9
                 when scd.下单数量>85 and scd.下单数量<=90 then 77
                 when scd.下单数量>90 and scd.下单数量<=150 then 0.85
                 when scd.下单数量>150 and scd.下单数量<=160 then 128
                 when scd.下单数量>160  then 0.8 end
end
*
case when scd.生产分厂 = 'N2' then 1.5 when scd.生产分厂 = 'N3' and cpbm.分类 = 'T' then 1.5 else 1 end
as 油漆工资,
cpgzde.装配单价,
cpgzde.装配单价*case when cpbm.分类 ='C' or cpbm.分类 ='C2' then
        case when scd.下单数量<=40 then 2
                 when scd.下单数量>40 and scd.下单数量<=60 then 80
                 when scd.下单数量>60 and scd.下单数量<=80 then 1.3
                 when scd.下单数量>80 and scd.下单数量<=104 then 104
                 when scd.下单数量>104 and scd.下单数量<=200 then 1
                 when scd.下单数量>200 and scd.下单数量<=1000 then 200
                 when scd.下单数量>1000  then 0.95 end
else
        case when scd.下单数量<=10 then 2
                 when scd.下单数量>10 and scd.下单数量<=15 then 20
                 when scd.下单数量>15 and scd.下单数量<=20 then 1.3
                 when scd.下单数量>20 and scd.下单数量<=26 then 26
                 when scd.下单数量>26 and scd.下单数量<=50 then 1
                 when scd.下单数量>50 and scd.下单数量<=55 then 50
                 when scd.下单数量>55 and scd.下单数量<=85 then 0.9
                 when scd.下单数量>85 and scd.下单数量<=90 then 77
                 when scd.下单数量>90 and scd.下单数量<=150 then 0.85
                 when scd.下单数量>150 and scd.下单数量<=160 then 128
                 when scd.下单数量>160  then 0.8 end
end
as 装配工资,
cpgzde.包装单价,
cpgzde.包装单价*case when cpbm.分类 ='C' or cpbm.分类 ='C2' then
        case when scd.下单数量<=40 then 2
                 when scd.下单数量>40 and scd.下单数量<=60 then 80
                 when scd.下单数量>60 and scd.下单数量<=80 then 1.3
                 when scd.下单数量>80 and scd.下单数量<=104 then 104
                 when scd.下单数量>104 and scd.下单数量<=200 then 1
                 when scd.下单数量>200 and scd.下单数量<=1000 then 200
                 when scd.下单数量>1000  then 0.95 end
else
        case when scd.下单数量<=10 then 2
                 when scd.下单数量>10 and scd.下单数量<=15 then 20
                 when scd.下单数量>15 and scd.下单数量<=20 then 1.3
                 when scd.下单数量>20 and scd.下单数量<=26 then 26
                 when scd.下单数量>26 and scd.下单数量<=50 then 1
                 when scd.下单数量>50 and scd.下单数量<=55 then 50
                 when scd.下单数量>55 and scd.下单数量<=85 then 0.9
                 when scd.下单数量>85 and scd.下单数量<=90 then 77
                 when scd.下单数量>90 and scd.下单数量<=150 then 0.85
                 when scd.下单数量>150 and scd.下单数量<=160 then 128
                 when scd.下单数量>160  then 0.8 end
end
as 包装工资,
case when cpbm.分类 ='C' or cpbm.分类 ='C2' then
        case when scd.下单数量<=40 then 2
                 when scd.下单数量>40 and scd.下单数量<=60 then 80
                 when scd.下单数量>60 and scd.下单数量<=80 then 1.3
                 when scd.下单数量>80 and scd.下单数量<=104 then 104
                 when scd.下单数量>104 and scd.下单数量<=200 then 1
                 when scd.下单数量>200 and scd.下单数量<=1000 then 200
                 when scd.下单数量>1000  then 0.95 end
else
        case when scd.下单数量<=10 then 2
                 when scd.下单数量>10 and scd.下单数量<=15 then 20
                 when scd.下单数量>15 and scd.下单数量<=20 then 1.3
                 when scd.下单数量>20 and scd.下单数量<=26 then 26
                 when scd.下单数量>26 and scd.下单数量<=50 then 1
                 when scd.下单数量>50 and scd.下单数量<=55 then 50
                 when scd.下单数量>55 and scd.下单数量<=85 then 0.9
                 when scd.下单数量>85 and scd.下单数量<=90 then 77
                 when scd.下单数量>90 and scd.下单数量<=150 then 0.85
                 when scd.下单数量>150 and scd.下单数量<=160 then 128
                 when scd.下单数量>160  then 0.8 end
end  as 批量系数

FROM scd,cpgzde,cpbm
WHERE cpbm.产品编码 = scd.产品编码
and scd.产品编码 = cpgzde.产品编码

order by scd.生产单号,scd.顺号

TA的精华主题

TA的得分主题

发表于 2008-12-15 09:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
你在SQL里自定义一个函数不就行了嘛.

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-12-15 10:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-12-15 11:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如以下建一个函数 dbo.AABBSS
使用时 dbo.AABBSS(12) 就会显示为"不大于20的数字"


ALTER FUNCTION dbo.AABBSS
(@L001 int)
RETURNS varchar(200)
AS
begin
declare @xL01 varchar(200)

if @L001>20
begin
   set @xL01='大于20的数字'

end
else
begin
   set @xL01='不大于20的数字'
end

RETURN (@xL01)
end
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 20:44 , Processed in 0.038721 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表