[英]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: 您可以使用外部应用对
LoyaltyPoint
和MannerPoint
进行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.