sql怎样写?

rongxh 2005-08-31 06:43:40
表1:
date No am
7-1 1 200
7-5 2 500
8-4 3 100
表2:
date No am
7-15 1 200
8-5 2 100
结果:8月数据为:
co1 co2 co3 co4 co5
1 0 0 0 0
2 500 0 100 400
3 0 100 0 100
...全文
115 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
iwl 2005-09-01
  • 打赏
  • 举报
回复
你结果是怎么计算的
vivianfdlpw 2005-09-01
  • 打赏
  • 举报
回复
declare @a table
(
[date] varchar(10),
[No] int,
am int
)
declare @b table
(
[date] varchar(10),
[No] int,
am int
)
insert @a
select '7-1',1,200 union
select '7-5',2,500 union
select '8-4',3,100

insert @b
select '7-15',1,200 union
select '8-5',2,100

--测试
select *,
[col5]=col2+col3-col4
from
(
select [col1]=A.[No],
[col2]=( sum(case when left(A.[date],1)<'8' then A.am else 0 end)
-
sum(case when left(B.[date],1)<'8' then isnull(B.am,0) else 0 end)
),
[col3]=sum(case when left(A.[date],1)='8' then A.am else 0 end),
[col4]=sum(case when left(B.[date],1)='8' then isnull(B.am,0) else 0 end)
from @a A
left join @b B on A.[No]=B.[No]
group by A.[No]
)t

--结果
/*
col1 col2 col3 col4 col5
----------- ----------- ----------- ----------- -----------
1.00 .00 .00 .00 .00
2.00 500.00 .00 100.00 400.00
3.00 .00 100.00 .00 100.00

(所影响的行数为 3 行)
*/
turenjie 2005-09-01
  • 打赏
  • 举报
回复
例如,第二行,是500+200-200=500还是500-0=500?
说白了是些日期之前的求和吗?
turenjie 2005-09-01
  • 打赏
  • 举报
回复
co2还是有点费解!再详细点,帮up!
rongxh 2005-09-01
  • 打赏
  • 举报
回复
有人回答吗?
rongxh 2005-09-01
  • 打赏
  • 举报
回复
结果是co1是No,co2是8月之前的No的表1-表2,co3是8月表1数据,co4是8月表2的数据,co5=co2+co3-co4。


co1 co2 co3 co4 co5
1 0 0 0 0
2 500 0 100 400
3 0 100 0 100
云中客 2005-08-31
  • 打赏
  • 举报
回复
把你的问题说清楚好吗
gimy007 2005-08-31
  • 打赏
  • 举报
回复
没看懂你结果是这么计算的~~~~

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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