简体   繁体   English

如何编辑此mssql查询?

[英]How to edit this mssql query?

I've got this query below associated with my clan ranking php script. 我在下面将这个查询与我的部落排名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

I want to add second rule for MannerPoint as additional to the Loyalty. 我想为MannerPoint添加第二条规则,作为“忠诚度”的补充。 So, it will display both Manner and Loyalty points and order them by both. 因此,它将同时显示方式和忠诚度积分,并按两者进行排序。

For example if clan has 10000 Loyalty and 100 Manner, it will be higher in rankings than 20000 Loyalty and only 50 Manner. 例如,如果氏族拥有10000忠诚度和100礼节,则其排名将高于20000忠诚度和仅50礼节。

I tried a few but failed. 我尝试了几次,但是失败了。 It will be really appreciated if someone is willing to help me. 如果有人愿意帮助我,将不胜感激。

EDIT: I tried that: 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 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

but it doesnt display at all. 但它根本不显示。

You can sum both LoyaltyPoint and MannerPoint using outer apply: 您可以使用外部应用对LoyaltyPointMannerPoint进行MannerPoint

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

or simple subquery: 或简单的子查询:

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

Don't know how do you want to order your records, if you want to order by sum of ClanManner and ClanLoyalty, you can do this: 不知道如何订购记录,如果要按ClanManner和ClanLoyalty的总和订购,则可以执行以下操作:

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

this: 这个:

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`

has a syntax issue with an extra parenthesis in it and should be: 有一个语法问题,其中带有一个额外的括号,应为:

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`

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM