0

以下のクエリは、私のクラン ランキング 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

MannerPointLoyalty の追加として2 番目のルールを追加したいと思います。そのため、マナー ポイントとロイヤリティ ポイントの両方が表示され、両方で並べ替えられます。

たとえば、クランの忠誠度が 10000 でマナーが 100 の場合、忠誠度が 20000 でマナーが 50 しかない場合よりもランキングが高くなります。

いくつか試しましたが失敗しました。誰かが私を助けてくれると本当にありがたいです.

編集:私はそれを試しました: 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

しかし、それはまったく表示されません。

4

2 に答える 2

0

LoyaltyPoint両方を合計し、 MannerPointouter apply を使用できます。

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

ClanManner と ClanLoyalty の合計で並べ替える場合は、次のようにします。

order by isnull(u.ClanManner, 0) + isnull(u.ClanLoyalty, 0) desc
于 2013-09-09T12:28:35.740 に答える
0

これ:

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`
于 2013-09-11T23:23:12.123 に答える