sql语句中的foxpro是否有可能根据条件最大分数和ID用不同的名称来填充winners_name列

问题描述 投票:1回答:1

sql语句中的foxpro是否可以根据条件最高分和ID用不同的名称添加和填充winners_name列。

我创建了一个sql语句,但是foxpro不支持它,还有其他替代方法,而不是使用循环(我喜欢sql语句,即使在50k行中也能获得更快的结果)

SELECT * , ;
(SELECT TOP 1 doc_name FROM Table1 as b1 WHERE ALLTRIM(b1.id) = a.id ORDER BY b1.score DESC, b1.id) as WINNERS_NAME ;
FROM Table1 as a

我只有1个表,其列[名称,ID,分数]

示例表将是这样

NAME   | ID   | SCORE |
BEN    | 101  | 5     |
KEN    | 101  | 2     |
ZEN    | 101  | 3     |
JEN    | 103  | 4     |
REN    | 103  | 3     |
LEN    | 102  | 5     |
PEN    | 102  | 4     |
ZEN    | 102  | 3     |  

结果将是这样的(winners_name是ID上的标记)

NAME   | ID   | SCORE | WINNERS_NAME
BEN    | 101  | 5     | BEN
KEN    | 101  | 2     | BEN
ZEN    | 101  | 3     | BEN
JEN    | 103  | 4     | PEN
REN    | 103  | 3     | PEN
LEN    | 102  | 5     | LEN
PEN    | 103  | 5     | PEN
ZEN    | 102  | 3     | LEN
sql visual-foxpro
1个回答
0
投票

尝试这种方法:

SELECT
    a.NAME,
    a.ID,
    a.SCORE,
    b.WINNERS_NAME
FROM Table1 a
INNER JOIN
(
    SELECT t1.ID, t1.NAME AS WINNERS_NAME
    FROM
    (
        SELECT ID, SCORE, MIN(NAME) AS NAME
        FROM Table1
        GROUP BY ID, SCORE
    ) t1
    INNER JOIN
    (
        SELECT ID, MAX(SCORE) AS MAX_SCORE
        FROM Table1
        GROUP BY ID
    ) t2
        ON t1.ID = t2.ID AND
           t1.SCORE = t2.MAX_SCORE 
) b
    ON a.ID = b.ID
ORDER BY
    a.ID;

按照下面的链接在MySQL中运行的演示(尽管语法在FoxPro上仍然可以使用):

Demo

© www.soinside.com 2019 - 2024. All rights reserved.