sql 查询语句 查询出前5条数据,其余数据用其他表示

chenrong980 2014-12-22 11:04:37

我表中实际的数据
序号 goodsName SumTotal SumNumber PJ XdUnitPrice
1 厅装可乐 138.00 30 4.600000 3
2 可乐 108.00 26 4.153846 3
3 厅装雪碧 102.00 24 4.250000 3
4 雪碧 48.00 16 3.000000 3
5 水费 15.00 5 3.000000 3
6 电费 12.00 4 3.000000 3
7 液化气 12.00 4 3.000000 3
8 房租 9.00 3 3.000000 3

要得到的数据,其他这一行的数据时这样算的,
SumTotal=12+12+9
SumNumber=4+4+3/3 这是算平均值,所以需要除以3
PJ=3+3+3/3 这是算平均值,所以需要除以3
XdUnitPrice=3+3+3/3 这是算平均值,所以需要除以3


序号 goodsName SumTotal SumNumber PJ XdUnitPrice
1 厅装可乐 138.00 30 4.600000 3
2 可乐 108.00 26 4.153846 3
3 厅装雪碧 102.00 24 4.250000 3
4 雪碧 48.00 16 3.000000 3
5 水费 15.00 5 3.000000 3
6 其他 33 11 3 3
...全文
670 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenrong980 2014-12-22
  • 打赏
  • 举报
回复
引用 2 楼 Tiger_Zhao 的回复:
SELECT * FROM table1 WHERE 序号 <= 5
UNION ALL
SELECT 6,
       '其他',
       SUM(SumTotal),
       SUM(SumNumber),
       AVG(PJ),
       AVG(XdUnitPrice)
  FROM table1
 WHERE 序号 > 5
我是要取前面5条数据,这个序号是按照插入数据的顺序,我是根据 order by SumTotal desc 取出前面SumTotal 最大的数据。
Tiger_Zhao 2014-12-22
  • 打赏
  • 举报
回复
SELECT * FROM table1 WHERE 序号 <= 5
UNION ALL
SELECT 6,
'其他',
SUM(SumTotal),
SUM(SumNumber),
AVG(PJ),
AVG(XdUnitPrice)
FROM table1
WHERE 序号 > 5
chenrong980 2014-12-22
  • 打赏
  • 举报
回复
弄错了,这个SumNumber=4+4+3/3 这个不需要算平均,这个算总和
Ginnnnnnnn 2014-12-22
  • 打赏
  • 举报
回复

USE tempdb
GO

CREATE TABLE #TestTB
(
	序号 INT,
	GoodsName NVARCHAR(50),
	SumTotal MONEY ,
	SumNumber INT,
	PJ FLOAT,
	XdUnitPrice INT
)

INSERT INTO #TestTB (序号,goodsName,SumTotal,SumNumber,PJ,XdUnitPrice)
VALUES
(1,'厅装可乐',138.00,30,4.600000,3	),
(2,'可乐',108.00,26,4.153846,3	),
(3,'厅装雪碧',102.00,24,4.250000,3),
(4,'雪碧',48.00,16,3.000000,3	),
(5,'水费',15.00,5,3.000000,3	),
(6,'电费',12.00,4,3.000000,3),
(7,'液化气',12.00,4,3.000000,3	),
(8,'房租',9.00,3,3.000000,3)

;WITH CTE AS(
SELECT TOP 5 序号 FROM #TestTB)
SELECT TOP 5 
	a.序号,goodsName,SumTotal,SumNumber,PJ,XdUnitPrice
	FROM #TestTB a
		INNER JOIN CTE b ON a.序号 = b.序号
UNION ALL
SELECT MIN(序号)-1,'其它',SUM(SumTotal),SUM(SumNumber),AVG(PJ),AVG(XdUnitPrice)
	FROM #TestTB a
		WHERE NOT EXISTS(SELECT * FROM CTE WHERE 序号 = a.序号)
		
chenrong980 2014-12-22
  • 打赏
  • 举报
回复
引用 4 楼 Tiger_Zhao 的回复:
WITH t AS (
    SELECT ROW_NUMBER() OVER(ORDER BY SumTotal DESC) AS 序号,
           *
      FROM table1
)
SELECT * FROM t WHERE 序号 <= 5
UNION ALL
SELECT 6,
       '其他',
       SUM(SumTotal),
       SUM(SumNumber),
       AVG(PJ),
       AVG(XdUnitPrice)
  FROM t
 WHERE 序号 > 5
谢谢啊!
Tiger_Zhao 2014-12-22
  • 打赏
  • 举报
回复
WITH t AS (
SELECT ROW_NUMBER() OVER(ORDER BY SumTotal DESC) AS 序号,
*
FROM table1
)
SELECT * FROM t WHERE 序号 <= 5
UNION ALL
SELECT 6,
'其他',
SUM(SumTotal),
SUM(SumNumber),
AVG(PJ),
AVG(XdUnitPrice)
FROM t
WHERE 序号 > 5

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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