如何选择并将同一列中的条目区别到另一个结果列中?

时间:2013-12-11 16:12:24

标签: mysql sql

我有一张桌子上有一个名单,每个名字都有他自己的薪水和头衔,每个骑士都喜欢他自己的国王:

ID | NAME  | SALARY | TITLE  | KingNo
01 | Jones | 900    | King   | 
02 | Smith | 800    | Knight | 01
03 | Janel | 110    | Knight | 05
04 | David | 500    | Knight | 01
05 | James | 900    | King   |
06 | Judas | 150    | Knight | 05

但是现在我需要把所有骑士的薪水与他们的国王之间的差额区分开来。

我知道如何获得每个国王的薪水和每个骑士的薪水,但我无法弄清楚如何才能将差异变成一个新的cloumn。

ID | NAME  | SALARY | TITLE   | KingNo | Difference
01 | Jones | 950    | King    |        | 
02 | Smith | 800    | Knight  | 01     | -150
03 | Janel | 110    | Knight  | 05     | -840
04 | David | 500    | Knight  | 01     | -450
05 | James | 950    | King    |        | 
06 | Judas | 150    | Knight  | 05     | -800

有人可以给我一个提示我怎么能做到这一点? 对不起,我的英语不好,我不是母语人士。

最好的问候

2 个答案:

答案 0 :(得分:0)

SELECT
    t1.ID, t1.NAME, t1.SALARY, t1.TITLE, t1.KingNo,
    t1.SALARY - COALESCE(t2.SALARY, 0) AS Difference
FROM
    knights t1
    LEFT JOIN knights t2 ON (t1.KingNo = t2.ID)
WHERE
    t1.TITLE != "King"

答案 1 :(得分:0)

我只知道MS SQL不是MySQL ...所以我尝试用MS SQL解决你的问题.... 以下程序可能对你有用......

SELECT K.ID, K.NAME, K.Salary, K.Title, K.KingNo,
( CAST(K.Salary AS INT)
                 - CAST(( SELECT TOP 1
                                    KM.salary
                          FROM      dbo.KingMaster KM
                          WHERE     KM.ID < K.ID
                                    AND KM.KingNo IS NULL
                          ORDER BY  id DESC
                        ) AS INT) )  'Diff'
FROM dbo.KingMaster AS K
ORDER BY K.ID