有如下表TB
COL1 SP YEAR MONTH SL JE
地点A 电脑 2010 1 100 500
地点A 电脑 2010 1 110 530
地点A 手机 2010 1 102 710
地点A 手机 2010 1 101 801
地点A 手机 2010 2 52 802
地点A 手机 2010 2 53 803
地点A 电脑 2010 2 55 804
地点A 电脑 2010 2 54 814
地点B 电脑 2010 1 100 500
地点B 电脑 2010 1 110 530
地点B 手机 2010 1 102 710
地点B 手机 2010 1 101 801
地点B 手机 2010 2 52 802
地点B 手机 2010 2 53 803
地点B 电脑 2010 2 55 804
地点B 电脑 2010 2 54 814我想分类算出每个月的平均价格,格式如下COL1 SP YEAR MONTH SL JE AVG (当月该地点所有SP的总金额/总数量)
地点A 电脑 2010 1 220 1030 6
地点A 手机 2010 1 203 1511 6
地点A 手机 2010 2 105 1605 15
地点A 电脑 2010 2 109 1618 15
地点B 电脑 2010 1 220 1030 6
地点B 手机 2010 1 203 1511 6
地点B 手机 2010 2 105 1605 15
地点B 电脑 2010 2 109 1618 15
COL1 SP YEAR MONTH SL JE
地点A 电脑 2010 1 100 500
地点A 电脑 2010 1 110 530
地点A 手机 2010 1 102 710
地点A 手机 2010 1 101 801
地点A 手机 2010 2 52 802
地点A 手机 2010 2 53 803
地点A 电脑 2010 2 55 804
地点A 电脑 2010 2 54 814
地点B 电脑 2010 1 100 500
地点B 电脑 2010 1 110 530
地点B 手机 2010 1 102 710
地点B 手机 2010 1 101 801
地点B 手机 2010 2 52 802
地点B 手机 2010 2 53 803
地点B 电脑 2010 2 55 804
地点B 电脑 2010 2 54 814我想分类算出每个月的平均价格,格式如下COL1 SP YEAR MONTH SL JE AVG (当月该地点所有SP的总金额/总数量)
地点A 电脑 2010 1 220 1030 6
地点A 手机 2010 1 203 1511 6
地点A 手机 2010 2 105 1605 15
地点A 电脑 2010 2 109 1618 15
地点B 电脑 2010 1 220 1030 6
地点B 手机 2010 1 203 1511 6
地点B 手机 2010 2 105 1605 15
地点B 电脑 2010 2 109 1618 15
select COL1,SP,[YEAR],[MONTH], SL=sum(sl), JE=sum(je), [AVG]=sum(sl)*1.0/sum(je)
from 表名
group by COL1,SP,[YEAR],[MONTH]
from 表名 where MONTH = 1 --忘记数字是否需要加单引号了你试验一下~1就代表1月,2就代表2月依此类推
group by COL1,SP,[YEAR],[MONTH]
from 表名 where MONTH = 1 --忘记数字是否需要加单引号了你试验一下~1就代表1月,2就代表2月依此类推
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([COL1] [nvarchar](10),[SP] [nvarchar](10),[YEAR] [int],[MONTH] [int],[SL] [int],[JE] [int])
INSERT INTO [tb]
SELECT '地点A','电脑','2010','1','100','500' UNION ALL
SELECT '地点A','电脑','2010','1','110','530' UNION ALL
SELECT '地点A','手机','2010','1','102','710' UNION ALL
SELECT '地点A','手机','2010','1','101','801' UNION ALL
SELECT '地点A','手机','2010','2','52','802' UNION ALL
SELECT '地点A','手机','2010','2','53','803' UNION ALL
SELECT '地点A','电脑','2010','2','55','804' UNION ALL
SELECT '地点A','电脑','2010','2','54','814' UNION ALL
SELECT '地点B','电脑','2010','1','100','500' UNION ALL
SELECT '地点B','电脑','2010','1','110','530' UNION ALL
SELECT '地点B','手机','2010','1','102','710' UNION ALL
SELECT '地点B','手机','2010','1','101','801' UNION ALL
SELECT '地点B','手机','2010','2','52','802' UNION ALL
SELECT '地点B','手机','2010','2','53','803' UNION ALL
SELECT '地点B','电脑','2010','2','55','804' UNION ALL
SELECT '地点B','电脑','2010','2','54','814'SELECT * FROM [tb]-->SQL查询如下:
select COL1,SP,[YEAR],[MONTH],SUM(SL) SL,SUM(JE) JE,
(select SUM(JE) FROM tb WHERE col1=t.col1 AND [YEAR]=t.[YEAR] AND [MONTH]=t.[MONTH])
/(select SUM(SL) FROM tb WHERE col1=t.col1 AND [YEAR]=t.[YEAR] AND [MONTH]=t.[MONTH]) [AVG]
FROM tb t
GROUP BY COL1,SP,[YEAR],[MONTH]
/*
COL1 SP YEAR MONTH SL JE AVG
---------- ---------- ----------- ----------- ----------- ----------- -----------
地点A 电脑 2010 1 210 1030 6
地点A 手机 2010 1 203 1511 6
地点A 电脑 2010 2 109 1618 15
地点A 手机 2010 2 105 1605 15
地点B 电脑 2010 1 210 1030 6
地点B 手机 2010 1 203 1511 6
地点B 电脑 2010 2 109 1618 15
地点B 手机 2010 2 105 1605 15(8 行受影响)
*/