• 全部
  • 问答

请教一条SQL语句如何写?高分求救,挺急的

时光瞄 开发工程师  2018-11-07 03:34:35
如下图所示:
q1、q2、q3和q4是用户账号,m1、m2、m3和m4是四个金额字段
q1和m1是肯定有值的,后面的三组字段不一定有值
如何按照用户的账号来求m1、m2、m3、m4的合计值并按金额倒序排序呢?
困扰我几天了,实在是想不出来怎么写

...全文
23 1 收藏 3
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
时光瞄 2018-11-07
感谢版主的热心回答,测试已通过。
回复
吉普赛的歌 2018-11-07
USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
	id INT PRIMARY KEY,
	q1 INT NOT NULL,
	m1 DECIMAL(10,2) NOT NULL,
	q2 INT,
	m2 DECIMAL(10,2),
	q3 INT,
	m3 DECIMAL(10,2),
	q4 INT,
	m4 DECIMAL(10,2)
) 
GO
SET NOCOUNT ON
INSERT INTO t
          SELECT 1	,10001,8.8,10002,3.8,10007,1.8,10003,1.3
UNION ALL SELECT 2	,10005,1.3,10002,6.6,NULL,NULL,NULL,null
UNION ALL SELECT 3	,10002,6.5,10004,3.2,10003,7.2,NULL,null
UNION ALL SELECT 4	,10004,3.9,10005,5.4,NULL,NULL,NULL,null		
UNION ALL SELECT 5	,10007,2.9,NULL,NULL,10004,2.3,NULL,null
UNION ALL SELECT 6	,10009,4.2,10001,3.7,NULL,NULL,NULL,NULL
UNION ALL SELECT 7	,10004,6.7,NULL,NULL,NULL,NULL,NULL,NULL
UNION ALL SELECT 8	,10002,3.8,NULL,NULL,NULL,NULL,NULL,NULL
---- 以上为测试数据 ------

SELECT 
q
,SUM(m) AS m 
FROM (
	SELECT q1 AS q,m1 AS m FROM t
	UNION ALL
	SELECT q2,m2 FROM t
	UNION ALL
	SELECT q3,m3 FROM t
	UNION ALL
	SELECT q4,m4 FROM t
) AS tt 
WHERE q IS NOT NULL AND m IS NOT NULL
GROUP BY q
ORDER BY m DESC

/*
q           m
----------- -------
10002       20.70
10004       16.10
10001       12.50
10003       8.50
10005       6.70
10007       4.70
10009       4.20
 */
回复
二月十六 2018-11-07
建议楼主列出表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
回复
相关推荐
发帖
MySQL
创建于2007-09-28

5.5w+

社区成员

MySQL相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2018-11-07 03:34
社区公告
暂无公告