数据重组

fzcheng 2013-03-22 03:43:13
请大侠们帮忙弄下,因为从表数据不准确,想汇总后取主表的平均值,分配下去,可以一步到位吗?谢谢。


DECLARE @t TABLE
(INVNO NVARCHAR(20),Amount DECIMAL(18,2))
INSERT INTO @t
SELECT 'A',300 UNION ALL
SELECT 'B',500

DECLARE @td TABLE
(INVNO NVARCHAR(20),Item NVARCHAR(30),Amount DECIMAL(18,2))
INSERT INTO @td
SELECT 'A','001',50 UNION ALL
SELECT 'A','001',180 UNION ALL
SELECT 'A','002',50 UNION ALL
SELECT 'A','002',100 UNION ALL
SELECT 'B','001',200 UNION ALL
SELECT 'B','001',50 UNION ALL
SELECT 'B','002',100 UNION ALL
SELECT 'B','002',100

'A','001',150
'A','002',150
'B','001',250
'B','002',250

...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fzcheng 2013-03-23
  • 打赏
  • 举报
回复

--我就怕这样弄会严重影响速度,我一直在等待,版主给点意见吧。
---涛声依旧--- 2013-03-23
  • 打赏
  • 举报
回复
invno item num_avg num
A 001 100.0000000000000 3
A 002 100.0000000000000 3
A 003 100.0000000000000 3
B 001 250.0000000000000 2
B 002 250.0000000000000 2
---涛声依旧--- 2013-03-23
  • 打赏
  • 举报
回复
DECLARE @t TABLE (INVNO NVARCHAR(20),Amount DECIMAL(18,2)) INSERT INTO @t SELECT 'A',300 UNION ALL SELECT 'B',500 DECLARE @td TABLE (INVNO NVARCHAR(20),Item NVARCHAR(30),Amount DECIMAL(18,2)) INSERT INTO @td SELECT 'A','001',50 UNION ALL SELECT 'A','001',180 UNION ALL SELECT 'A','002',50 UNION ALL SELECT 'A','002',100 UNION ALL SELECT 'A','003',20 UNION ALL SELECT 'B','001',200 UNION ALL SELECT 'B','001',50 UNION ALL SELECT 'B','002',100 UNION ALL SELECT 'B','002',100 select b.invno,c.item,a.amount/b.num num_avg,b.num from @t a inner join (select invno,COUNT(1) num from (select distinct INVNO,Item from @td ) d group by invno ) b on a.invno = b.invno inner join (select distinct invno,item from @td) c on a.INVNO=c.INVNO
fzcheng 2013-03-22
  • 打赏
  • 举报
回复
是不是可以运用,SQL2005新函数哦。
fzcheng 2013-03-22
  • 打赏
  • 举报
回复

DECLARE @t TABLE
(INVNO NVARCHAR(20),Amount DECIMAL(18,2))
INSERT INTO @t
SELECT 'A',300 UNION ALL
SELECT 'B',500 

DECLARE @td TABLE
(INVNO NVARCHAR(20),Item NVARCHAR(30),Amount DECIMAL(18,2))
INSERT INTO @td
SELECT 'A','001',50 UNION ALL
SELECT 'A','001',180 UNION ALL
SELECT 'A','002',50 UNION ALL
SELECT 'A','002',100 UNION ALL
SELECT 'A','003',20 UNION ALL
SELECT 'B','001',200 UNION ALL
SELECT 'B','001',50 UNION ALL
SELECT 'B','002',100 UNION ALL
SELECT 'B','002',100 

select b.invno,b.item,a.amount/b.num,b.num
from @t a ,(select invno,item,num = count(1) from @td group by invno,item ) b
 where  a.invno = b.invno 
有问题 我期望的是这样的。 A 001 100.0000000000000 3 A 002 100.0000000000000 3 A 003 100.0000000000000 3 B 001 250.0000000000000 2 B 002 250.0000000000000 2
chuanzhang5687 2013-03-22
  • 打赏
  • 举报
回复
引用 3 楼 fzcheng 的回复:
SQL code?1--哥哥 代码能够看下吗?
呵呵,没粘贴完整
fzcheng 2013-03-22
  • 打赏
  • 举报
回复

--哥哥 代码能够看下吗?

chuanzhang5687 2013-03-22
  • 打赏
  • 举报
回复
DECLARE @t TABLE
(INVNO NVARCHAR(20),Amount int)
INSERT INTO @t
SELECT 'A',300 UNION ALL
SELECT 'B',500 
 
DECLARE @td TABLE
(INVNO NVARCHAR(20),Item NVARCHAR(30),Amount int)
INSERT INTO @td
SELECT 'A','001',50 UNION ALL
SELECT 'A','001',180 UNION ALL
SELECT 'A','002',50 UNION ALL
SELECT 'A','002',100 UNION ALL
SELECT 'B','001',200 UNION ALL
SELECT 'B','001',50 UNION ALL
SELECT 'B','002',100 UNION ALL
SELECT 'B','002',100 

select b.invno,b.item,a.amount/b.num
from @t a ,
(
	select invno,item,num = count(1) from @td
	group by invno,item
) b
where  a.invno = b.invno



chuanzhang5687 2013-03-22
  • 打赏
  • 举报
回复

(2 行受影响)

(8 行受影响)
invno                item                           
-------------------- ------------------------------ -----------
A                    001                            150
A                    002                            150
B                    001                            250
B                    002                            250

(4 行受影响)

34,575

社区成员

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

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