有个表
A B C
一 1 ni
一 2 wo
二 3 ta
二 4 shui
有这么几个条件
一 A列值相同
二 在条件一的情况下根据B列最大的值取C列的值
详细点说就是,上表应该取到wo,shui两个值,因为在A列同个“一”值里,B列的“2”值最大,所以取C列的"wo", 另外个"shui"值也是一样。
可是,我不知道怎么去实现。
有没有大神可以解答下?
根据你们的提点,可以实现 了,但又出现了新的问题。
SELECT youshiSz FROM (
SELECT xiaobanID,jixuJ,youshiSz,rownum=ROW_NUMBER() OVER(PARTITION BY xiaobanID ORDER BY jixuJ DESC) FROM Resources_XiBan)
t WHERE t.rownum=1 ORDER BY xiaobanID
这个能得到一列值。
那我怎么将这个语句放到一个select a,b,c from ttt 的语句里面呢?(这个语句得到的值和上面语句得到的值数量相同)
我用了union什么的,都不行。
或者直接
select a,b,c,
(SELECT youshiSz FROM (
SELECT xiaobanID,jixuJ,youshiSz,rownum=ROW_NUMBER() OVER(PARTITION BY xiaobanID ORDER BY jixuJ DESC) FROM Resources_XiBan)
t WHERE t.rownum=1 ORDER BY xiaobanID) as d
from ttt
也不行。。
可以尝试下另外的解法:
--构造测试数据 CREATE TABLE #t(A VARCHAR(50),B INT ,C VARCHAR(50)) INSERT INTO #t SELECT '一',1,'ni' UNION SELECT '一',2,'wo' UNION SELECT '二',3,'ta' UNION SELECT '二',4,'shui' --查询结果。 SELECT * FROM ( SELECT *,rownum=ROW_NUMBER() OVER(PARTITION BY A ORDER BY B DESC) FROM #t) t WHERE t.rownum=1 ORDER BY A desc
给你的表起个名称Student,据观察B列应该为主键。代码如下:
select a.A,a.B,a.C from dbo.Student a
inner join( select A,max(B)as B from dbo.Student group by A) b on a.B= b.B
实现效果如下:
(以上是SQL语法,Oracle语法类似)
(⊙v⊙)嗯,楼上的办法很赞