Php 如何编辑此mssql查询?

Php 如何编辑此mssql查询?,php,sql,sql-server,Php,Sql,Sql Server,下面的查询与我的部族排名php脚本关联 SELECT TOP 100 IDNum, IDName, Nation, (SELECT SUM(LoyaltyPoint) FROM USERDATA WHERE USERDATA.Knights = KNIGHTS.IDNum AND USERDATA.Authority IN(1, 2)) as ClanLoyalty FROM KNIGHTS ORDER BY ClanLoyalty DES

下面的查询与我的部族排名php脚本关联

SELECT TOP 100 
  IDNum, 
  IDName, 
  Nation, 
  (SELECT SUM(LoyaltyPoint) 
   FROM USERDATA 
   WHERE USERDATA.Knights = KNIGHTS.IDNum 
     AND USERDATA.Authority IN(1, 2)) as ClanLoyalty 
FROM KNIGHTS 
ORDER BY ClanLoyalty DESC
我想为MannerPoint添加第二条规则,作为忠诚度的补充。 因此,它将显示方式和忠诚度点数,并按两者排序

例如,如果氏族拥有10000个忠诚和100种方式,那么它的排名将高于20000个忠诚和50种方式

我试了几次,但失败了。如果有人愿意帮助我,我将不胜感激

编辑:我试过: 选择前100名IDNum、IDName、Nation,从USERDATA中选择SUMLoyaltyPoint,其中USERDATA.Knights=Knights.IDNum和USERDATA.Authority IN1,2为氏族忠诚,从USERDATA中选择SumAnnerPoint,其中USERDATA.Knights=Knights.IDNum和USERDATA

但它根本不显示。

您可以使用外部应用将忠诚点和礼貌点相加:

select top 100
    k.IDNum, 
    k.IDName, 
    k.Nation, 
    u.ClanLoyalty,
    u.ClanManner 
from KNIGHTS as k
    outer apply (
        select
            sum(u.LoyaltyPoint) as ClanLoyalty,
            sum(u.MannerPoint) as ClanManner
        from USERDATA as u
        where u.Knights = k.IDNum and u.Authority in (1, 2)
    ) as u
order by u.ClanManner desc, u.ClanLoyalty desc
或简单子查询:

select top 100
    k.IDNum, 
    k.IDName, 
    k.Nation, 
    u.ClanLoyalty,
    u.ClanManner
from KNIGHTS as k
    left outer join (
        select
            u.Knights,
            sum(u.LoyaltyPoint) as ClanLoyalty,
            sum(u.MannerPoint) as ClanManner
        from USERDATA as u
        where u.Authority in (1, 2)
        group by u.Knights
    ) as u on u.Knights = k.IDNum
order by u.ClanManner desc, u.ClanLoyalty desc
不知道您想如何订购记录,如果您想按ClanWay和Clan忠诚度之和订购,您可以这样做:

order by isnull(u.ClanManner, 0) + isnull(u.ClanLoyalty, 0) desc
这:

有一个语法问题,其中有一个额外的括号,应该是:

SELECT TOP 100 
IDNum, IDName, Nation, 
    (SELECT SUM(LoyaltyPoint)
     FROM USERDATA 
     WHERE USERDATA.Knights = KNIGHTS.IDNum 
           AND USERDATA.Authority IN(1, 2)) as ClanLoyalty,
    (SELECT SUM(MannerPoint) 
     FROM USERDATA 
     WHERE USERDATA.Knights = KNIGHTS.IDNum 
           AND USERDATA.Authority IN(1, 2) ) as MannerPoint 
FROM KNIGHTS 
ORDER BY ClanLoyalty DESC, MannerPoint DESC`

首先,您需要指定方式点的存储位置。它们在用户数据中的位置与忠诚度点相同。在主select语句中,为方式点添加另一个返回列,并将其包含在您的订单中。例如,select[existingColumn],选择方式作为MannerPoint from。。。哪里按MannerPoint desc排序,宗族忠诚度desc选择前100名IDNum,IDName,Nation,从USERDATA中选择SUMLoyaltyPoint,其中USERDATA.Knights=Knights.IDNum和USERDATA.Authority IN1,2作为宗族忠诚度,从USERDATA中选择SumAnnerPoint,其中USERDATA.Knights=Knights.IDNum和USERDATA.Authority IN1,2作为骑士骑士团的人物点忠诚描述,人物点描述是这样的吗?这完全正确吗?是的,我想这是正确的
SELECT TOP 100 
IDNum, IDName, Nation, 
    (SELECT SUM(LoyaltyPoint)
     FROM USERDATA 
     WHERE USERDATA.Knights = KNIGHTS.IDNum 
           AND USERDATA.Authority IN(1, 2)) as ClanLoyalty,
    (SELECT SUM(MannerPoint) 
     FROM USERDATA 
     WHERE USERDATA.Knights = KNIGHTS.IDNum 
           AND USERDATA.Authority IN(1, 2) ) as MannerPoint 
FROM KNIGHTS 
ORDER BY ClanLoyalty DESC, MannerPoint DESC`