求SQL语句(SQL7、2000) (100分)

  • 主题发起人 少爷的拐杖
  • 开始时间

少爷的拐杖

Unregistered / Unconfirmed
GUEST, unregistred user!
有如下格式表:
编号 数量 日期 类型
1 30 2002-04 盘前
2 40 2002-04 盘前
3 50 2002-04 盘前
4 45 2002-04 盘前
。。。。
1 34 2002-04 盘后
3 48 2002-04 盘后
4 43 2002-04 盘后
。。。。

能否用一句SQL得到如下格式的表?
编号 盘前数量 盘后数量 日期 差额 百分比
1 30 34 2002-04
2 40 0 2002-04
3 50 48 2002-04
4 45 43 2002-04
。。。。。
 
Select Table1.编号,Table1.数量,Table2.数量,Table1.日期,
Table1.数量-Table2.数量 as 差额,
(if Table2.数量<>0 then (Table1.数量-Table2.数量)/Table2.数量
else 0) as 百分比
From Table1,Table2
Where Table1.编号=Table2.编号

 
呵呵,最好用left join.
因为Table1中有的,Table2中未必有。
所以用
Select a.编号,a.数量,b.数量,b.日期,
a.数量-b.数量 as 差额,
(if ifnull(b.数量,0)<>0 then (a.数量-b.数量)/b.数量
else 0) as 百分比
from table1 a left join table2 b on a.编号=b.编号
 
select 编号,盘前数量=sum(case when 类型=‘盘前’then 数量 else 0 end),
盘后数量=sum(case when 类型=‘盘后’then 数量 else 0 end),日期,
差额=sum(case when 类型=‘盘前’ then 数量 when 类型=‘盘后’ then -1×数量
else 0 end),差额/盘前数量
from table nanem
group by 编号,日期,差额/盘前数量
 
這些資料是不是來自同一個Table呢?
如果是的話.可以如下:
SELECT A.编号,A.数量 AS 盤前數量,B.数量 AS 盤后數量,A.日期,
A.数量-B.数量 AS 差额,
(IF ISNULL(B.数量,0)<>0 THEN (A.数量-B.数量)/B.数量 ELSE 0) AS 百分比
FROM (SELECT * FROM Table1 WHERE 類型='盤前') A
LEFT JOIN (SELECT * FROM Table1 WHERE 類型='盤后') B
ON (A.编号=B.编号 AND A.日期=B.日期)
 
示例库如下
CREATE TABLE [dbo].[tt] (
[tt] [int] IDENTITY (1, 1) NOT NULL ,//主键
[id] [int] NOT NULL , //编号
[sl] [int] NOT NULL , //数量
[rq] [char] (10) NOT NULL , //日期
[lx] [char] (10) NOT NULL //类型
)
则:
select a.id 编号,a.pq [盘签数量],a.ph [盘后数量],a.rq 日期 ,(a.pq-a.ph) 差额 ,cast(cast((a.pq-a.ph) as float)/cast(isnull(a.pq,1) as float) as numeric(6,4))*100 百分比
from(select id ,max((case when lx='盘前' then sl else null end)) pq,
max((case when lx='盘后' then sl else null end)) ph,rq from tt group by id,rq ) a
如盘前盘后数据存于两个表中则先把两表union在一起操作
没注意,其实道理和ugvanxk的差不多
 
可以用左连接,但是,速度会比较慢哦。
 
谢谢大家,我的是一个表中的数据.所以我试验了ugvanxk大侠的语句,基本通过,
但是差额和百分比似乎不行,删去可以得到:

select medicine_list.药品名称,medicine_list.规格,medicine_list.单位,tmp.盘前数量,tmp.盘后数量,tmp.差额 from medicine_list,(select 编号,盘前数量=sum(case when 盘点类型='盘前数据'then 数量 else 0 end),
盘后数量=sum(case when 盘点类型='盘后数据' then 数量 else 0 end),盘点时间,
差额=-sum(case when 盘点类型='盘前数据' then 数量 when 盘点类型='盘后数据' then-1*数量 else 0 end)
from medicine_center_Statistics
group by 编号,盘点时间) tmp
where medicine_list.id=tmp.编号

药品名称 规格 单位 盘前数量 盘后数量 差额
------------------------------ ---------------- ---- ----------- ----------- -----------
青霉素粉 400g 瓶 44 44 0
先锋霉素胶 0.125*10 板 11 11 0
氨苄青霉素 0.25*12*2 板 123 0 -123
头孢拉定胶 0.25*24 盒 1200 1300 100
头孢拉定可 2g*12 盒 1200 1200 0
四环素片 0.25g 片 1188 1188 0
氨卞青霉素 0.5g 支 200 200 0
....
返回的错误信息是不存在差额,百分比这两个字段,但是我还是希望能一步到位,各位能不能
帮着看看?我想改可是水平有限,不知怎么改.不论如何此问题今晚结束.谢谢大家.
 
多人接受答案了。
 
顶部