现在情况是这样的,我已通过sql语句查询出初步符合条件的表
需求:1:表中所有字段都是分组条件除了obligate2数字列,
即:group_no + hs_code+ i_e_ +obligate3+ custom_code + curr 是一组
2:在同一个group_no下且不同i_e_下才可以根据字段分组条件相减obligate2数字列
3:在同一个group_no下且不同i_e_下相减规则是:
同一个group_no 下i_e_=2 的 obligate2数字 减去 同一个group_no i_e_=1 的 obligate2 数字
4:得出结果如果i_e_=2 的 obligate2数字大于i_e_=1 的 obligate2数字 那么结果就是
别的列相同 而列i_e_等2 列obligate2就是他们的差,反之一样 取绝对值
如
group_no hs_code i_e_ obligate3 custom_code obligate2 curr
7 abc 1 js2001 0129 200 116
7 abc 2 js2001 0129 280 116
根据规则结果应该是:
group_no hs_code i_e_ obligate3 custom_code obligate2 curr
7 abc 2 js2001 0129 80 116
3:如果在同一个group_no下 根据字段分组条件找补到可以相减的那么就原封的现实该行 如图2:第三行数据
4:图2 里第一二行都是根据字段分组条件相减obligate2数字列 得出的结果,也是我想要的。
初步查询结果如图1:
group_no hs_code i_e_ obligate3 custom_code obligate2 curr
7 abc 1 js2001 0129 200 116
7 abc 1 js2001 0129 200 142
7 abc 2 js2001 0129 200 116
7 abc 2 js2001 0129 280 142
7 abc 1 js2002 0129 50 116
8 abc 1 js2001 0129 200 116
8 abc 1 js2001 0129 200 142
8 abc 2 js2001 0129 200 116
8 abc 2 js2001 0129 280 142
8 abc 2 js2002 0129 50 142
想要查询结果如图2:
group_no hs_code i_e_ obligate3 custom_code obligate2 curr
7 abc 2 js2001 0129 0 116
7 abc 2 js2001 0129 80 142
7 abc 1 js2002 0129 50 116
8 abc 2 js2001 0129 0 116
8 abc 2 js2001 0129 80 142
8 abc 1 js2002 0129 50 116
希望我表达的清楚了,请问大侠这样SQL语句怎么写啊 高分项送
需求:1:表中所有字段都是分组条件除了obligate2数字列,
即:group_no + hs_code+ i_e_ +obligate3+ custom_code + curr 是一组
2:在同一个group_no下且不同i_e_下才可以根据字段分组条件相减obligate2数字列
3:在同一个group_no下且不同i_e_下相减规则是:
同一个group_no 下i_e_=2 的 obligate2数字 减去 同一个group_no i_e_=1 的 obligate2 数字
4:得出结果如果i_e_=2 的 obligate2数字大于i_e_=1 的 obligate2数字 那么结果就是
别的列相同 而列i_e_等2 列obligate2就是他们的差,反之一样 取绝对值
如
group_no hs_code i_e_ obligate3 custom_code obligate2 curr
7 abc 1 js2001 0129 200 116
7 abc 2 js2001 0129 280 116
根据规则结果应该是:
group_no hs_code i_e_ obligate3 custom_code obligate2 curr
7 abc 2 js2001 0129 80 116
3:如果在同一个group_no下 根据字段分组条件找补到可以相减的那么就原封的现实该行 如图2:第三行数据
4:图2 里第一二行都是根据字段分组条件相减obligate2数字列 得出的结果,也是我想要的。
初步查询结果如图1:
group_no hs_code i_e_ obligate3 custom_code obligate2 curr
7 abc 1 js2001 0129 200 116
7 abc 1 js2001 0129 200 142
7 abc 2 js2001 0129 200 116
7 abc 2 js2001 0129 280 142
7 abc 1 js2002 0129 50 116
8 abc 1 js2001 0129 200 116
8 abc 1 js2001 0129 200 142
8 abc 2 js2001 0129 200 116
8 abc 2 js2001 0129 280 142
8 abc 2 js2002 0129 50 142
想要查询结果如图2:
group_no hs_code i_e_ obligate3 custom_code obligate2 curr
7 abc 2 js2001 0129 0 116
7 abc 2 js2001 0129 80 142
7 abc 1 js2002 0129 50 116
8 abc 2 js2001 0129 0 116
8 abc 2 js2001 0129 80 142
8 abc 1 js2002 0129 50 116
希望我表达的清楚了,请问大侠这样SQL语句怎么写啊 高分项送
高分项送............ 跪求SQL语句求差语句[问题点数:20分]
汗一个先
7 abc 2 js2001 0129 0 116
7 abc 2 js2001 0129 80 142
7 abc 1 js2002 0129 50 116
8 abc 2 js2001 0129 0 116
8 abc 2 js2001 0129 80 142
8 abc 1 js2002 0129 50 116
这最后一行数据怎么得来的?
create table tt(group_no int, hs_code varchar(3), i_e_ int, obligate3 varchar(10), custom_code varchar(10), obligate2 int, curr int)
go
insert into tt
select 7, 'abc', 1 ,'js2001' ,'0129' ,200, 116
union all select 7 ,'abc', 1 ,'js2001', '0129', 200 ,142
union all select 7 ,'abc', 2 ,'js2001', '0129', 200 ,116
union all select 7 ,'abc', 2 ,'js2001', '0129', 280 ,142
union all select 7 ,'abc', 1 ,'js2002', '0129', 50 ,116
union all select 8 ,'abc', 1 ,'js2001', '0129', 200 ,116
union all select 8 ,'abc', 1 ,'js2001', '0129', 200 ,142
union all select 8 ,'abc', 2 ,'js2001', '0129', 200 ,116
union all select 8 ,'abc', 2 ,'js2001', '0129', 280 ,142
union all select 8 ,'abc', 2 ,'js2002', '0129', 50 ,142
go
select group_no, hs_code, substring(max(right('0000000000' + cast(obligate2 as varchar(10)), 6) + cast(i_e_ as varchar(10))), 7, 20), obligate3, custom_code,
case count(1) when 1 then max(obligate2) when 2 then abs(max(obligate2) - min(obligate2)) else -1 end as obligate2, curr
from tt
group by group_no, hs_code, obligate3, custom_code,curr
--having(count(i_e_) > 1)
go
rollback
group_no hs_code obligate3 custom_code obligate2 curr
----------- ------- ---------------------- ---------- ----------- ----------- -----------
7 abc 2 js2001 0129 0 116
7 abc 2 js2001 0129 80 142
7 abc 1 js2002 0129 50 116
8 abc 2 js2001 0129 0 116
8 abc 2 js2001 0129 80 142
8 abc 2 js2002 0129 50 142
你的可能是对的,我就想要你这样语句 我先试下 可以的话给分 谢谢先