读书人

数据重组解决思路

发布时间: 2013-05-02 09:39:29 作者: rapoo

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



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


[解决办法]
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




[解决办法]
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

读书人网 >SQL Server

热点推荐