Sql Server 查询,一共三列,怎样查出第一个列值相同,第二列值最大的第三列的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sql Server 查询,一共三列,怎样查出第一个列值相同,第二列值最大的第三列的值?相关的知识,希望对你有一定的参考价值。

a1 a2 taborder
1 a 1
2 a 2
3 b 5
4 b 6
5 b 8
6 c 9

想查出a2相同的情况下,taborder 值最大的a1值,谢谢啦
就是当a2 = a 时,查出a1 = 2; a2 = b 时,查出 a1 = 5.
把所有不同的a2列都显示出来,能不能用foreach?

这是一个很典型的,经常用到的,可以归纳为:
《按某列分组,求另一列最大或最小值所在整行数据的方法》
利用子查询,试一下,很好用的(a1可根据需要去掉):
select a2,a1 from tablename where
taborder=(select max(taborder) from tablename a where a.a2=tablename.a2)
查出结果为
a,2
b,5
c,6
参考技术A

用个sql就可以了

select B.a1, B.a2, B.taborder
 from
(
    select A.a2, max(A.a1) a1
     from table A
     group by A.a2
) A, table B
Where A.a2 = B.a2
and     A.a1 = B.a1

参考技术B select a2,max(a1) a1 from 表 group by a2

sql建表问题

我想建立一个表,第一列是姓名,第二列是投票数,第三列是此人票数的百分比.例如,甲、乙、丙三人得票分别为2,3,5票,怎样在第三列显现他们得票的百分比???

--DROP Table Test
--生成测试数据
CREATE TABLE TestPercent
(
姓名 varchar(20),
票数 int
)

INSERT INTO TestPercent
SELECT '甲',2
UNION ALL SELECT '乙',3
UNION ALL SELECT '丙',5

--查询数据
SELECT 姓名,票数,所占比列=LTRIM( CAST ((票数*1.0/总票数)*100 AS DECIMAL(12,2) ) ) + '%'
FROM TestPercent ,(SELECT SUM(票数)AS 总票数 FROM TestPercent )as t

--非要及时看到所占百分比
--创建个视图把
CREATE VIEW VTestPercent
AS
SELECT 姓名,票数,所占比列=LTRIM( CAST ((票数*1.0/总票数)*100 AS DECIMAL(12,2) ) ) + '%'
FROM TestPercent ,(SELECT SUM(票数)AS 总票数 FROM TestPercent )as t
--查询试图
SELECT * FROM VTestPercent

--删除测试数据
DROP VIEW VTestPercent
DROP TABLE TestPercent

--希望对你有帮助 我用的是SQLSERVER
参考技术A 这一列使计算的到来的 所以可以不用在表中创建该列 当需要获得这一数据时 使用select语句进行计算

比如 表结构 toupiao(姓名,票数)
当需要获得每人的票数百分比是可以用下面的语句获得

select 姓名,票数,票数/sum(票数) as 百分比 from 投票

这样就会得到每个人的姓名票数及其百分比
参考技术B 根据题意,当插入一条记录时,因为总票数增加,所以表中所有的记录“百分比”字段都需要更新。
给表加触发器:
比如表名是tab。执行以下语句创建触发器:

CREATE TRIGGER [inserted_tab] ON [dbo].[tab]
FOR INSERT
AS
update tab
set 百分比=cast(投票数 as float)*100/(select sum(投票数) from tab)
from tab
这样当插入记录时,百分比字段将自动更新。

希望对你有帮助!
参考技术C 一楼集函数没你那种用法
二楼的每次查看结果都要运行一遍存储过程
正确的方法要用触发器,这样牵涉到变异表的操作,标准的模式为3个触发器和一个临时表
一个语句级before触发器,清空临时表的数据
一个行级before触发器,向临时表写入需要更新的id
一个语句级after触发器,读取临时表中的id,计算统计信息更新你的表
参考技术D 可以写一个存储过程呀
用它来计算结果加入到表中
create proc jisuan @name char(8)
as
update table_1
set 百分比=convert(float,票数)/(select sum(票数) from table_1)
where 姓名=@name

以上是关于Sql Server 查询,一共三列,怎样查出第一个列值相同,第二列值最大的第三列的值?的主要内容,如果未能解决你的问题,请参考以下文章

怎样在一条sql语句中将第一列和第二列加和的值作为第三列的值

sql如何在查出的数据前加上编号

SQLserver 怎么把查出的字符串结果作为子查询条件

sql数据库查询,只能查出第一条记录?

怎样写SQL查询,在同一个数据库,同一个表,同一个字段查出重复数据?

查找值不为null的列sql语句