请问子查询里的某个字段的值是取自另外一个表的,该怎么写?

panxiaosen 2007-10-22 03:09:26
下面子查询里的单价是取自另外一个物品表的单价字段,该怎么写呢?

DECLARE @StartDate varchar(10)
DECLARE @EndDate varchar(10)

set @StartDate='2006-01-01'
set @EndDate='2007-12-30'


select * from

--查询日期前进货和进货退货量,及其总额
(Select sum(case 类型 when '进货单' then 数量*单价 else 0 end) As 进货总额 From 进货退货 Where 日期 < @StartDate) A,
(Select sum(case 类型 when '调入单' then 数量*单价 else 0 end) As 调入总额 From 调拨 Where 日期 < @StartDate) B
...全文
127 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxinyuzhu 2007-10-25
  • 打赏
  • 举报
回复

--这是你想要的结果吗?
--简单的测试
declare @t table(id int,lx varchar(20),sl int,dj float,sj varchar(20))
insert into @t
select 1,'jin',10,10,'20070101'
union all select 2,'jin',20,11,'20070101'
union all select 3,'jin',12,12,'20070101'
union all select 4,'ru',55,14,'20070101'
declare @b table(id int,lx varchar(20),sl int,sj varchar(20))
insert into @b
select 1,'diao',5,'20071011'
union all select 2,'diao',7,'20071012'
union all select 4,'diao',10,'20071015'

declare @m varchar(20)
declare @n varchar(20)
set @m='20071010'
set @n='20071012'

select a.id, sum(case when a.lx = 'jin' and a.sj <@m then a.sl*a.dj else 0 end) 'jze',
sum(case when b.lx ='diao' and b.sj>@n then b.sl*a.dj else 0 end) 'dze'from @t a left join @b b on a.id=b.id

group by a.id

Colin_Sun 2007-10-23
  • 打赏
  • 举报
回复
mark,studing!
pt1314917 2007-10-23
  • 打赏
  • 举报
回复

楼主改成这样试试:
DECLARE @StartDate varchar(10)
DECLARE @EndDate varchar(10)

set @StartDate= '2006-01-01 '
set @EndDate= '2007-12-30 '

select * from
--查询日期前进货和进货退货量,及其总额
(Select sum(case 类型 when '进货单 ' then 数量*b.单价 else 0 end) As 进货总额 From 进货退货,物品资料 b Where 日期 < @StartDate and 商品编号 = b.商品编号) A,
(Select sum(case 类型 when '调入单 ' then 数量*b.单价 else 0 end) As 调入总额 From 调拨,物品资料 b Where 日期 < @StartDate and 商品编号 = b.商品编号) B



panxiaosen 2007-10-22
  • 打赏
  • 举报
回复
TO sunhonglei2004
两个表的关联字段是 物品编号



TO dawugui

我改成下面的这样,提示错误:

服务器: 消息 130,级别 15,状态 1,行 11
不能对包含聚合或子查询的表达式执行聚合函数。

DECLARE @StartDate varchar(10)
DECLARE @EndDate varchar(10)

set @StartDate='2006-01-01'
set @EndDate='2007-12-30'


select * from

--查询日期前进货和进货退货量,及其总额
(Select 商品编号, sum(case 类型 when '进货单' then 数量*(select 单价 from 物品资料 where 商品编号 = a.商品编号) else 0 end) As 进货总额 From 进货退货 Where 日期 < @StartDate) A GROUP BY 商品编号/*,
dawugui 2007-10-22
  • 打赏
  • 举报
回复
select isnull(m.id,n.id) id , isnull(m.进货总额,0) 进货总额,isnull(n.调入总额,0) 调入总额 from
(Select sum(case 类型 when '进货单' then 数量*(select 单价 from c where id = a.id) else 0 end) As 进货总额
From 进货退货 a Where 日期 < @StartDate group by id) m
full join
(Select sum(case 类型 when '调入单' then 数量*(select 单价 from c where id = a.id) else 0 end) As 调入总额
From 调拨 a Where 日期 < @StartDate group by id) n
on m.id = n.id


dawugui 2007-10-22
  • 打赏
  • 举报
回复
--这样?
Select id ,
sum(case 类型 when '进货单' then 数量*(select 单价 from C where id = a.id) else 0 end) As 进货总额
From 进货退货 Where 日期 < @StartDate A
group by id
sunhonglei2004 2007-10-22
  • 打赏
  • 举报
回复
两个表之间得有关联字段啊,它是以进货单和调入单关联的吗

34,575

社区成员

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

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