关于网友提出的“ 急求一个进销存的sql语句按货品类别查询交易汇总”问题疑问,本网通过在网上对“ 急求一个进销存的sql语句按货品类别查询交易汇总”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 急求一个进销存的sql语句按货品类别查询交易汇总
描述: 我请教一个进销存的sql语句,
按货品类别查询交易汇总,
表结构
交易主表:
货单编号 单据类别
A1 出货
B2 出退
交易明细:
流水号 货单编号 单据类别 货品编号 数量 金额
1 A1 出货 G1 10 100
2 A1 出货 G2 10 100
3 B1 出退 G1 5 50
4 B1 出退 G2 5 50
货品主表:
货品编号 货品类别
G1 K_电脑
G1 J_家用
要求查询结果:
货品编号 出货数 出货金额 退货数 退货金额
解决方案1: select 货品编号,sum(case 单据类别 when A1 then 1 else 0) as 出货数,sum(select 金额 from 交易明细 where 货单编号 = A1)as 出货金额,sum(case 单据类别 when B1 then 1 else 0) as 退货数,sum(select 金额 from 交易明细 where 货单编号 = B1) as 退货金额 from 交易明细 group by 货品编号
解决方案2: create table 交易明细
( 流水号 char(10),
货单编号 char(10),
单据类别 char(10),
货品编号 char(10),
数量 integer,
金额 integer
)
insert into 交易明细
select '1', 'A1' , '出货', 'G1' , 10 , 100
union
select '2', 'A1' , '出货', 'G2' , 10 , 100
union
select '3', 'B1' , '出退', 'G1' , 5 , 50
union
select '4', 'B1' , '出退', 'G2' , 5 , 50
union
select '5', 'B1' , '出货', 'G1' , 5 , 50
union
select '6', 'B1' , '出退', 'G2' , 1 , 10
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT 货品编号'
SELECT @SQL= @SQL+ ',sum(CASE WHEN 单据类别 = ''' + 单据类别 + ''' THEN 数量 else 0 END) [' +rtrim(单据类别) + '数量]'
+ ',sum(CASE WHEN 单据类别 = ''' + 单据类别 + ''' THEN 金额 else 0 END) [' +rtrim(单据类别) + '金额]'
FROM (SELECT DISTINCT 单据类别 FROM 交易明细) A
SET @SQL=@SQL+ ' FROM 交易明细 GROUP BY 货品编号'
EXEC (@SQL)
drop table 交易明细
解决方案3: select *,b.OutNum,c.inNum from 货品信息表 A
left join
(select sum(数量) as OutNum ,货品编号 from 交易明细 where 单据类别 ='出货' order by 货品编号) b on
a.货品编号=b.货品编号
left join
(select sum(数量) inNum,货品编号 from 交易明细 where 单据类别 ='出退 ' order by 货品编号) c on
a.货品编号=c.货品编号
以上介绍了“ 急求一个进销存的sql语句按货品类别查询交易汇总”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3321996.html