1这个业务是1/9
2这个业务是2/8
N01这个行型的是5/5
那么现在我现在遇到这个问题。假如这台机运行这个业务,那么它必须使用指定的分成方式,如N01这种机器运行2这个业务,那么它的分成方式为5/5而如果
N02这个机器运行2这个业务,那么它采用的分成方式为2/8.
那么我现在遇到这问题。我必须先判断这机器是不是有它自己的分成业务,如果有,就用它的,如果没有就按业务规定的分成方式.
select case when 1=1 then 'a' when 2=2 then 'b'
得到是'a',所以我想这么写:
select case when exists (select ratio from baseinfo where xh=xhnum) then
select ratio from baseinfo where xh=xhnum
case when exists (select ratio from baseinfo where yw=ywnum) then select ratio from baseinfo where yw=ywnum else 1 end
但是这样的写法不可以实现,有其它办法可以实现吗?
17 个解决方案
#1
这个问题实在没有看明白.
#2
就是这样的,假如有2中交易类型:直接交易,间接交易.
那这些交易的利润分成:直接交易分法是20/80,间接交易分法是30/70,E20这样的机器上的这些业务分法是50/50(就是说不管是直接交易还是间接交易,都是按50/50分)
现在假如我们有两台机器,E10,E20,现在要算利润了,
E10上面的直接交易分法是20/80,间接交易分法是30/70.
E20上面的直接交易分法是50/50,间接交易分法是50/50.
那这些交易的利润分成:直接交易分法是20/80,间接交易分法是30/70,E20这样的机器上的这些业务分法是50/50(就是说不管是直接交易还是间接交易,都是按50/50分)
现在假如我们有两台机器,E10,E20,现在要算利润了,
E10上面的直接交易分法是20/80,间接交易分法是30/70.
E20上面的直接交易分法是50/50,间接交易分法是50/50.
#3
用left join
select
case when b.id is null then ... ----相当于你的not exists
else ...
end
from a left join b on ...
select
case when b.id is null then ... ----相当于你的not exists
else ...
end
from a left join b on ...
#4
也就是说E20上面虽然有直接交易和间接交易,但是它是有规定的按50/50分,所以它要优先采用 直接交易分法是50/50,间接交易分法是50/50.
#5
文字这么解释多累呀,你不如贴出表结构,例子数据,要的结果,必要的文字解释一下,这里除了冒牌的都是高手,看结构和数据不用看结是都能做出来。
#6
好的,你们等一下.
#7
table1
id
ratio --分成数据
ratio_memo --备注
ratio_kind --分成方式 1是业务1,2是业务2
id ratio ratio_Memo ratio_kind
1 50/50 1
2 40/60 2
3 20/80 E40 1
4 30/70 E40 2
table2
Mach_num --机器编号
jy_1 --交易量
jy_xl --交易类型
Mach_num jy_1 jy_xl
0001 3000 1
0002 4000 2
0003 2322 2
table2
Mach_num --机器编号
mach_xh --机器型号
mach_num mach_xh
0001 E40
0002 E10
0003 E20
得到结果
mach_num jy_l ratio
0001 3000 20/80
0002 4000 40/60
0003 2322 40/60
id
ratio --分成数据
ratio_memo --备注
ratio_kind --分成方式 1是业务1,2是业务2
id ratio ratio_Memo ratio_kind
1 50/50 1
2 40/60 2
3 20/80 E40 1
4 30/70 E40 2
table2
Mach_num --机器编号
jy_1 --交易量
jy_xl --交易类型
Mach_num jy_1 jy_xl
0001 3000 1
0002 4000 2
0003 2322 2
table2
Mach_num --机器编号
mach_xh --机器型号
mach_num mach_xh
0001 E40
0002 E10
0003 E20
得到结果
mach_num jy_l ratio
0001 3000 20/80
0002 4000 40/60
0003 2322 40/60
#8
select a.Mach_num,a.jy_1,
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table2 b
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on c.ratio_Memo='' and c.ratio_kind=a.jy_xl
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table2 b
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on c.ratio_Memo='' and c.ratio_kind=a.jy_xl
#9
有些错误,改正测试:
--建立环境
create table table1 (
id int,
ratio varchar(20), --分成数据
ratio_memo varchar(20), --备注
ratio_kind int --分成方式 1是业务1,2是业务2
)
go
insert table1
select
1, '50/50', '', 1
union all select
2, '40/60', '' , 2
union all select
3, '20/80', 'E40', 1
union all select
4, '30/70' , 'E40' , 2
go
create table table2 (
Mach_num varchar(20), --机器编号
jy_1 int, --交易量
jy_xl int --交易类型
)
go
insert table2
select
'0001', 3000, 1
union all select
'0002', 4000, 2
union all select
'0003', 2322, 2
go
create table table3 (
Mach_num varchar(20), --机器编号
mach_xh varchar(20) --机器型号
)
go
insert table3
select
'0001', 'E40'
union all select
'0002', 'E10'
union all select
'0003', 'E20'
go
--修改后的语句
select a.Mach_num,a.jy_1,
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table3 b --这里改了
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on d.ratio_Memo='' and d.ratio_kind=a.jy_xl --这里改了
go
--结果
/*
Mach_num jy_1 ratio
-------------------- ----------- --------------------
0001 3000 20/80
0002 4000 40/60
0003 2322 40/60
(所影响的行数为 3 行)
*/
--建立环境
create table table1 (
id int,
ratio varchar(20), --分成数据
ratio_memo varchar(20), --备注
ratio_kind int --分成方式 1是业务1,2是业务2
)
go
insert table1
select
1, '50/50', '', 1
union all select
2, '40/60', '' , 2
union all select
3, '20/80', 'E40', 1
union all select
4, '30/70' , 'E40' , 2
go
create table table2 (
Mach_num varchar(20), --机器编号
jy_1 int, --交易量
jy_xl int --交易类型
)
go
insert table2
select
'0001', 3000, 1
union all select
'0002', 4000, 2
union all select
'0003', 2322, 2
go
create table table3 (
Mach_num varchar(20), --机器编号
mach_xh varchar(20) --机器型号
)
go
insert table3
select
'0001', 'E40'
union all select
'0002', 'E10'
union all select
'0003', 'E20'
go
--修改后的语句
select a.Mach_num,a.jy_1,
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table3 b --这里改了
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on d.ratio_Memo='' and d.ratio_kind=a.jy_xl --这里改了
go
--结果
/*
Mach_num jy_1 ratio
-------------------- ----------- --------------------
0001 3000 20/80
0002 4000 40/60
0003 2322 40/60
(所影响的行数为 3 行)
*/
#10
我试试,多谢.
#11
zicxc(冒牌邹建 V0.3) ( ):
那个备注里面不是只存放机器编号的,有可能有其它的备注信息,你这么写的意思好象是说不为空的就是有机器型号的.我的实际要求不是这样的。
那个备注里面不是只存放机器编号的,有可能有其它的备注信息,你这么写的意思好象是说不为空的就是有机器型号的.我的实际要求不是这样的。
#12
Mach_num jy_1 直接业务 间接业务
-------------------- ----------- --------------------
0001 3000 20/80 30/70
0002 4000 1 40/60
0003 2322 1 40/60
-------------------- ----------- --------------------
0001 3000 20/80 30/70
0002 4000 1 40/60
0003 2322 1 40/60
#13
把例子改成你的一样的,要求也改成你的一样的
现在看不清楚
现在看不清楚
#14
哪个字段和哪个字段对应
#15
你有QQ吗?因为做的是银行的东西,不好贴太多东西.
#16
table1
id
ratio --分成数据
ratio_memo --备注
ratio_kind --分成方式 1是业务1,2是业务2
id ratio ratio_Memo ratio_kind
1 50/50 '没有使用' 1
2 40/60 '更换配件' 2
3 20/80 E40 1
4 30/70 E40 2
我的意思就是说ratio_memo这个字段不只是存放机器型号的。
所以
select a.Mach_num,a.jy_1,
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table3 b --这里改了
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on d.ratio_Memo='' and d.ratio_kind=a.jy_xl --这里改了
go
中的on d.ratio_Memo=''不可以这么写.
id
ratio --分成数据
ratio_memo --备注
ratio_kind --分成方式 1是业务1,2是业务2
id ratio ratio_Memo ratio_kind
1 50/50 '没有使用' 1
2 40/60 '更换配件' 2
3 20/80 E40 1
4 30/70 E40 2
我的意思就是说ratio_memo这个字段不只是存放机器型号的。
所以
select a.Mach_num,a.jy_1,
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table3 b --这里改了
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on d.ratio_Memo='' and d.ratio_kind=a.jy_xl --这里改了
go
中的on d.ratio_Memo=''不可以这么写.
#17
select a.Mach_num,a.jy_1,
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table3 b
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on d.ratio_Memo not in (select mach_xh from table3) and d.ratio_kind=a.jy_xl
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table3 b
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on d.ratio_Memo not in (select mach_xh from table3) and d.ratio_kind=a.jy_xl
#1
这个问题实在没有看明白.
#2
就是这样的,假如有2中交易类型:直接交易,间接交易.
那这些交易的利润分成:直接交易分法是20/80,间接交易分法是30/70,E20这样的机器上的这些业务分法是50/50(就是说不管是直接交易还是间接交易,都是按50/50分)
现在假如我们有两台机器,E10,E20,现在要算利润了,
E10上面的直接交易分法是20/80,间接交易分法是30/70.
E20上面的直接交易分法是50/50,间接交易分法是50/50.
那这些交易的利润分成:直接交易分法是20/80,间接交易分法是30/70,E20这样的机器上的这些业务分法是50/50(就是说不管是直接交易还是间接交易,都是按50/50分)
现在假如我们有两台机器,E10,E20,现在要算利润了,
E10上面的直接交易分法是20/80,间接交易分法是30/70.
E20上面的直接交易分法是50/50,间接交易分法是50/50.
#3
用left join
select
case when b.id is null then ... ----相当于你的not exists
else ...
end
from a left join b on ...
select
case when b.id is null then ... ----相当于你的not exists
else ...
end
from a left join b on ...
#4
也就是说E20上面虽然有直接交易和间接交易,但是它是有规定的按50/50分,所以它要优先采用 直接交易分法是50/50,间接交易分法是50/50.
#5
文字这么解释多累呀,你不如贴出表结构,例子数据,要的结果,必要的文字解释一下,这里除了冒牌的都是高手,看结构和数据不用看结是都能做出来。
#6
好的,你们等一下.
#7
table1
id
ratio --分成数据
ratio_memo --备注
ratio_kind --分成方式 1是业务1,2是业务2
id ratio ratio_Memo ratio_kind
1 50/50 1
2 40/60 2
3 20/80 E40 1
4 30/70 E40 2
table2
Mach_num --机器编号
jy_1 --交易量
jy_xl --交易类型
Mach_num jy_1 jy_xl
0001 3000 1
0002 4000 2
0003 2322 2
table2
Mach_num --机器编号
mach_xh --机器型号
mach_num mach_xh
0001 E40
0002 E10
0003 E20
得到结果
mach_num jy_l ratio
0001 3000 20/80
0002 4000 40/60
0003 2322 40/60
id
ratio --分成数据
ratio_memo --备注
ratio_kind --分成方式 1是业务1,2是业务2
id ratio ratio_Memo ratio_kind
1 50/50 1
2 40/60 2
3 20/80 E40 1
4 30/70 E40 2
table2
Mach_num --机器编号
jy_1 --交易量
jy_xl --交易类型
Mach_num jy_1 jy_xl
0001 3000 1
0002 4000 2
0003 2322 2
table2
Mach_num --机器编号
mach_xh --机器型号
mach_num mach_xh
0001 E40
0002 E10
0003 E20
得到结果
mach_num jy_l ratio
0001 3000 20/80
0002 4000 40/60
0003 2322 40/60
#8
select a.Mach_num,a.jy_1,
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table2 b
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on c.ratio_Memo='' and c.ratio_kind=a.jy_xl
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table2 b
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on c.ratio_Memo='' and c.ratio_kind=a.jy_xl
#9
有些错误,改正测试:
--建立环境
create table table1 (
id int,
ratio varchar(20), --分成数据
ratio_memo varchar(20), --备注
ratio_kind int --分成方式 1是业务1,2是业务2
)
go
insert table1
select
1, '50/50', '', 1
union all select
2, '40/60', '' , 2
union all select
3, '20/80', 'E40', 1
union all select
4, '30/70' , 'E40' , 2
go
create table table2 (
Mach_num varchar(20), --机器编号
jy_1 int, --交易量
jy_xl int --交易类型
)
go
insert table2
select
'0001', 3000, 1
union all select
'0002', 4000, 2
union all select
'0003', 2322, 2
go
create table table3 (
Mach_num varchar(20), --机器编号
mach_xh varchar(20) --机器型号
)
go
insert table3
select
'0001', 'E40'
union all select
'0002', 'E10'
union all select
'0003', 'E20'
go
--修改后的语句
select a.Mach_num,a.jy_1,
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table3 b --这里改了
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on d.ratio_Memo='' and d.ratio_kind=a.jy_xl --这里改了
go
--结果
/*
Mach_num jy_1 ratio
-------------------- ----------- --------------------
0001 3000 20/80
0002 4000 40/60
0003 2322 40/60
(所影响的行数为 3 行)
*/
--建立环境
create table table1 (
id int,
ratio varchar(20), --分成数据
ratio_memo varchar(20), --备注
ratio_kind int --分成方式 1是业务1,2是业务2
)
go
insert table1
select
1, '50/50', '', 1
union all select
2, '40/60', '' , 2
union all select
3, '20/80', 'E40', 1
union all select
4, '30/70' , 'E40' , 2
go
create table table2 (
Mach_num varchar(20), --机器编号
jy_1 int, --交易量
jy_xl int --交易类型
)
go
insert table2
select
'0001', 3000, 1
union all select
'0002', 4000, 2
union all select
'0003', 2322, 2
go
create table table3 (
Mach_num varchar(20), --机器编号
mach_xh varchar(20) --机器型号
)
go
insert table3
select
'0001', 'E40'
union all select
'0002', 'E10'
union all select
'0003', 'E20'
go
--修改后的语句
select a.Mach_num,a.jy_1,
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table3 b --这里改了
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on d.ratio_Memo='' and d.ratio_kind=a.jy_xl --这里改了
go
--结果
/*
Mach_num jy_1 ratio
-------------------- ----------- --------------------
0001 3000 20/80
0002 4000 40/60
0003 2322 40/60
(所影响的行数为 3 行)
*/
#10
我试试,多谢.
#11
zicxc(冒牌邹建 V0.3) ( ):
那个备注里面不是只存放机器编号的,有可能有其它的备注信息,你这么写的意思好象是说不为空的就是有机器型号的.我的实际要求不是这样的。
那个备注里面不是只存放机器编号的,有可能有其它的备注信息,你这么写的意思好象是说不为空的就是有机器型号的.我的实际要求不是这样的。
#12
Mach_num jy_1 直接业务 间接业务
-------------------- ----------- --------------------
0001 3000 20/80 30/70
0002 4000 1 40/60
0003 2322 1 40/60
-------------------- ----------- --------------------
0001 3000 20/80 30/70
0002 4000 1 40/60
0003 2322 1 40/60
#13
把例子改成你的一样的,要求也改成你的一样的
现在看不清楚
现在看不清楚
#14
哪个字段和哪个字段对应
#15
你有QQ吗?因为做的是银行的东西,不好贴太多东西.
#16
table1
id
ratio --分成数据
ratio_memo --备注
ratio_kind --分成方式 1是业务1,2是业务2
id ratio ratio_Memo ratio_kind
1 50/50 '没有使用' 1
2 40/60 '更换配件' 2
3 20/80 E40 1
4 30/70 E40 2
我的意思就是说ratio_memo这个字段不只是存放机器型号的。
所以
select a.Mach_num,a.jy_1,
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table3 b --这里改了
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on d.ratio_Memo='' and d.ratio_kind=a.jy_xl --这里改了
go
中的on d.ratio_Memo=''不可以这么写.
id
ratio --分成数据
ratio_memo --备注
ratio_kind --分成方式 1是业务1,2是业务2
id ratio ratio_Memo ratio_kind
1 50/50 '没有使用' 1
2 40/60 '更换配件' 2
3 20/80 E40 1
4 30/70 E40 2
我的意思就是说ratio_memo这个字段不只是存放机器型号的。
所以
select a.Mach_num,a.jy_1,
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table3 b --这里改了
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on d.ratio_Memo='' and d.ratio_kind=a.jy_xl --这里改了
go
中的on d.ratio_Memo=''不可以这么写.
#17
select a.Mach_num,a.jy_1,
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table3 b
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on d.ratio_Memo not in (select mach_xh from table3) and d.ratio_kind=a.jy_xl
case when c.ratio is null then d.ratio else c.ratio end as ratio
from table2 a inner join table3 b
on a.Mach_num=b.Mach_num
left join table1 c
on c.ratio_Memo=b.mach_xh and c.ratio_kind=a.jy_xl
left join table1 d
on d.ratio_Memo not in (select mach_xh from table3) and d.ratio_kind=a.jy_xl