急!这个SQL语句查询怎么会错误,头痛!(100)

  • 主题发起人 sunli_py
  • 开始时间
S

sunli_py

Unregistered / Unconfirmed
GUEST, unregistred user!
表;-------------------------------销售类型 | 货品名称 | 数量|------------------------------货品销售 | 座椅旋钮 | 1 |------------------------------货品销售 | 座椅旋钮 | 2 |------------------------------销售退货 | 座椅旋钮 | -1 |-------------------------------现在我要查出货品销售的详情另外放在一张表,想要的结果是:----------------------------------货品名称 | 销售数量 | 退货数量|----------------------------------座椅旋钮 | 3 | -1 |----------------------------------以下是SQL查询语句(select S.货品名称,sum(isnull(S.数量,0))as 销售数量,SUM(isnull(T.退货数量,0))AS 退货数量 from TEMP_st S left Join (select 货品名称,sum(数量)as 退货数量 from TEMP_st where 销售类型='销售退货' group by 货品名称) T on S.货品名称=T.货品名称 where S.销售类型='货品销售' group by S.货品名称 )可是查询出来的结果为什么是----------------------------------货品名称 | 销售数量 | 退货数量|----------------------------------座椅旋钮 | 3 | -2 |----------------------------------为什么这里统计的退货数量是 - 2啊?是哪边重复统计吗,还请各位多多帮忙.急呢! 谢谢
 
select 货品名称,sum(case 数量>0 then 数量 else 0) 销售数量 , sum(case 数量<0 then 数量 else 0) 退货数量 from TEMP_st group by 货品名称不知道行不行.没测试过.
 
select 货品名称,(select sum(数量) From 表 b where b.货品名称=a.货品名称 and b.销售类型='货品销售') 销售数量,(select sum(数量) from 表 c where c.货品名称=a.货品名称 and c.销售类型='销售退货') 退货数量 From 表 a
 
select x.货品名称,nvl(x.合计数量, 0) as 销售数量, nvl(y.合计数量, 0) as 退货数量 from (select * from (select 销售类型,货品名称,SUM(数量) AS 合计数量 from TEMP_st group by 销售类型, 货品名称) where 销售类型 = '货品销售')xleft join (select * from (select 销售类型,货品名称,SUM(数量) AS 合计数量 from TEMP_st group by 销售类型,货品名称) where 销售类型 = '销售退货')y on x.货品名称 = y.货品名称在ORACLE底下经过测试,NVL为ORACLE的判断空的函数,SQL SERVER中自己替换为ISNULL
 
select Distinct 货品名称,(select sum(数量) From 表 b where b.货品名称=a.货品名称 and b.销售类型='货品销售') 销售数量,(select sum(数量) from 表 c where c.货品名称=a.货品名称 and c.销售类型='销售退货') 退货数量 From 表 a
 
(select S.货品名称,sum(isnull(S.数量,0))as 销售数量,max(isnull(T.退货数量,0))AS 退货数量 from TEMP_st S left Join (select 货品名称,sum(数量)as 退货数量 from TEMP_st where 销售类型='销售退货' group by 货品名称) T on S.货品名称=T.货品名称 where S.销售类型='货品销售' group by S.货品名称 )
 
最好是用下面方法一:1.select 货品名称,sum(case when 销售类型='货品销售' then 数量 end) 销售数量,sum(case when 销售类型='销售退货' then 数量 end) 退货数量 from TEMP_st group by 货品名称2.select isnull(a.货品名称,b.货品名称) 货品名称,a.数量 销售数量,b.数量 退货数量 from (select 货品名称,sum(数量) 数量 from TEMP_st where 销售类型='货品销售' group by 货品名称) afull join (select 货品名称,sum(数量) 数量 from TEMP_st where 销售类型='销售退货' group by 货品名称) b on a.货品名称=b.货品名称
 
SELECT 货品名称, SUM(CASE WHEN 销售类型='货品销售' THEN ISNULL(数量,0) ELSE 0 END) 销售数量 , SUM(CASE WHEN 销售类型='销售退货' THEN ISNULL(数量,0) ELSE 0 END) 退货数量, FROM TEMP_st GROUP BY 货品名称
 
DECLARE @tbSrc TABLE(ID INT IDENTITY(1, 1) PRIMARY KEY, gType NVARCHAR(30), gName NVARCHAR(50), Qty INT)INSERT INTO @tbSrc(gType, gName, Qty) VALUES('货品销售', '座椅旋钮', 1)INSERT INTO @tbSrc(gType, gName, Qty) VALUES('货品销售', '座椅旋钮', 2)INSERT INTO @tbSrc(gType, gName, Qty) VALUES('销售退货', '座椅旋钮', -1)SELECT * FROM @tbSrcSELECT a.gName, a.Qty AQty, b.Qty BQtyFROM (SELECT gName, SUM(QTY) QTY FROM @tbSrc WHERE gType = '货品销售' GROUP BY gName) aLEFT OUTER JOIN (SELECT gName, SUM(QTY) QTY FROM @tbSrc WHERE gType = '销售退货' GROUP BY gName) b ON a.gName = b.gName
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
888
DelphiTeacher的专栏
D
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部