SQL 查询 - db2/400 系列
SQL query - db2/400 iseries
我的 SQL 组语句结果如下 table。从这个 table,当价格和日期匹配时,我需要从代码 ='B' 的数量中减去代码 ='S' 的数量。
例如,在下面的 table 中,我需要将值存储在工作变量中。
1) 100-50 = 前两行 50
2) 第 3 行和第 4 行 60 -30 = 30
3) 最后一行因为它没有代码 'S' 它应该 return 只是 20
Table
Price Date Code Sum(Qty)
9.0 201512 B 100
9.0 201512 S 50
8.0 201506 B 60
6.0 201506 S 30
5.0 201508 B 20
SQL查询用于获取上面的table
select Price, Date, Code,sum(Qty) from Table
where Type = 'A' and Acct = 'CLOSED'
group by Price,Date,Code
order by Price,Date
我可以使用 CASE 语句修改上面键入的现有 SQL 语句以获得所需的输出吗?我试过了,但是 Cursor return 一行一行地显示,CASE 似乎不起作用
exec sql
declare c1 cursor for
select Price, Date, Code,
Case when Code ='B' then ifnull(sum(Qty),0)
when Code ='S' then (-1 * ifnull(sum(Qty),0)) end
from Table
where Type = 'A' and Acct = 'CLOSED'
group by Price,Date,Code
order by Price,Date
exec sql
open c1
exec sql
fetch c1 into :var_price, :var_date, :var_code, :var_Bqty, :VarSqty
在 iseries 系统上使用 SQLRPGLE。
您可以为此使用条件聚合:
select Price, Date,
sum(case when code = 'B' then Qty when code = 'S' then -QTY end) as diff
from Table
where Type = 'A' and Acct = 'CLOSED'
group by Price, Date
order by Price, Date;
我的 SQL 组语句结果如下 table。从这个 table,当价格和日期匹配时,我需要从代码 ='B' 的数量中减去代码 ='S' 的数量。
例如,在下面的 table 中,我需要将值存储在工作变量中。
1) 100-50 = 前两行 50
2) 第 3 行和第 4 行 60 -30 = 30
3) 最后一行因为它没有代码 'S' 它应该 return 只是 20
Table
Price Date Code Sum(Qty)
9.0 201512 B 100
9.0 201512 S 50
8.0 201506 B 60
6.0 201506 S 30
5.0 201508 B 20
SQL查询用于获取上面的table
select Price, Date, Code,sum(Qty) from Table
where Type = 'A' and Acct = 'CLOSED'
group by Price,Date,Code
order by Price,Date
我可以使用 CASE 语句修改上面键入的现有 SQL 语句以获得所需的输出吗?我试过了,但是 Cursor return 一行一行地显示,CASE 似乎不起作用
exec sql
declare c1 cursor for
select Price, Date, Code,
Case when Code ='B' then ifnull(sum(Qty),0)
when Code ='S' then (-1 * ifnull(sum(Qty),0)) end
from Table
where Type = 'A' and Acct = 'CLOSED'
group by Price,Date,Code
order by Price,Date
exec sql
open c1
exec sql
fetch c1 into :var_price, :var_date, :var_code, :var_Bqty, :VarSqty
在 iseries 系统上使用 SQLRPGLE。
您可以为此使用条件聚合:
select Price, Date,
sum(case when code = 'B' then Qty when code = 'S' then -QTY end) as diff
from Table
where Type = 'A' and Acct = 'CLOSED'
group by Price, Date
order by Price, Date;