求二个sql语句

nyyswd1978 2014-12-20 09:20:45
一张表
东西 位置 数量
物品A 位置1 1000
物品A 位置2 2000
物品B 位置1 4000
物品B 位置3 1000
物品C 位置2 1500

(位置字段范围是固定的:位置1-位置3)。
一、求得第一个sql语句是要得到下面这样的表:

日期 位置1 位置2 位置3
系统时间 5000 3500 1000

简单说就是需要统计某个系统时间点每个位置的所有物品的数量。比如原表中位置1中有物品A 1000个和物品B 4000个。所以位置1中总数有1000+4000=5000个。

二、求得第二个sql语句是要得到下面这样的表:

日期 物品A 物品B 物品C
系统时间 3000 5000 1500

和第一个根据位置统计不同,这里是在某个系统时间点根据每个物品来统计数量。比如原表中物品A在位置1和位置2总共有3000个



谢谢大家!
...全文
411 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
HelloWordGirl 2015-01-06
  • 打赏
  • 举报
回复
如果物品很多的时候这样处理 DECLARE @s NVARCHAR(4000) SELECT @s = ISNULL(@s + ',', '')+QUOTENAME(东西) FROM (select distinct 东西 from ta) as A Declare @sql NVARCHAR(4000) SET @sql=' select * from (select 东西 ,getdate() as date,数量 from ta ) as t pivot ( sum(t.数量) for t.东西 in ('+@s+') ) as r' EXEC( @sql)
nyyswd1978 2014-12-20
  • 打赏
  • 举报
回复
谢谢楼上。第一个问题解决。因为给出的语句都是在固定条件下实现的。比如位置固定范围了而且不多才3个(位置1、位置2、位置3)。所以可以sum case。 但第二个还是不行。 因为物品不仅有物品A、物品B、物品C。有很多甚至上百千种。不可能把所有的物品都写入sum(case when 东西='物品a’)。。。sum(case when 东西='物品n'). 所以当我物品有上百千种 该怎么做?? 另一个问题确认下。“sum(case when 位置 = '位置1' then 数量。。。)” 这里的 数量 就是指定要sum的字段名么?
卖水果的net 2014-12-20
  • 打赏
  • 举报
回复

create table t (东西 varchar(30) , 位置 varchar(30) , 数量 int ) 
insert into t values('物品A', '位置1', 1000)
insert into t values('物品A', '位置2', 2000)
insert into t values('物品B', '位置1', 4000)
insert into t values('物品B', '位置3', 1000)
insert into t values('物品C', '位置2', 1500)
go
select GETDATE() , 
       SUM( case when 位置 = '位置1' then 数量 else 0 end) 位置1 ,
       SUM( case when 位置 = '位置2' then 数量 else 0 end) 位置2 ,
       SUM( case when 位置 = '位置3' then 数量 else 0 end) 位置3 
 from t 
select GETDATE() , 
       SUM( case when 东西 = '物品A' then 数量 else 0 end) 物品A ,
       SUM( case when 东西 = '物品B' then 数量 else 0 end) 物品B ,
       SUM( case when 东西 = '物品C' then 数量 else 0 end) 物品C 
 from t 
go

drop table t 

                      位置1       位置2       位置3
----------------------- ----------- ----------- -----------
2014-12-20 10:42:56.280 5000        3500        1000

(1 行受影响)

                      物品A       物品B       物品C
----------------------- ----------- ----------- -----------
2014-12-20 10:42:56.280 3000        5000        1500

(1 行受影响)

nyyswd1978 2014-12-20
  • 打赏
  • 举报
回复
需要横着放。 当我物品有很多时候。怎么做?
xiao421624 2014-12-20
  • 打赏
  • 举报
回复
把表竖起来放或者更简单些呀。
select GETDATE() 日期,SUM(数量) 数量 ,位置 from t group by 位置

日期	数量	位置
2014-11-26 13:46:45.497	5000	位置1
2014-11-26 13:46:45.497	3500	位置2
2014-11-26 13:46:45.497	1000	位置3

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧