سؤال

إنني أتطلع إلى دمج الاستعلامات التالية في استعلامات واحدة، حيث

  • scouting.jumpGate عدد صحيح،
  • scouting.astroLoc عبارة عن سلسلة،
  • scouting.ownerguild عبارة عن سلسلة و
  • scouting.galaxy هو عدد صحيح

التي ترتبط بجدول آخر (وهي مجموعتي):

    Select TOP 3 
        scouting.jumpGate, 
        scouting.astroLoc, 
        scouting.ownerGuild, 
        scouting.Galaxy 
FROM    scouting 
WHERE   scouting.Galaxy = 1 
AND     scouting.ownerGuild = 'TEST' 
ORDER BY    scouting.jumpGate DESC, 
            scouting.astroloc DESC;

و

    SELECT TOP 3 
        scouting.jumpGate, 
        scouting.astroLoc, 
        scouting.ownerGuild, 
        scouting.Galaxy 
FROM    scouting 
WHERE   scouting.Galaxy = 2 
AND     scouting.ownerGuild = 'TEST' 
ORDER BY    scouting.jumpGate DESC, 
            scouting.astroloc DESC;

و

    SELECT TOP 3 
        scouting.jumpGate, 
        scouting.astroLoc, 
        scouting.ownerGuild, 
        scouting.Galaxy 
FROM    scouting 
WHERE   scouting.Galaxy = 3 
AND     scouting.ownerGuild = 'TEST' 
ORDER BY    scouting.jumpGate DESC, 
            scouting.astroloc DESC;

استمر حتى

    SELECT TOP 3 
        scouting.jumpGate, 
        scouting.astroLoc, 
        scouting.ownerGuild, 
        scouting.Galaxy 
FROM    scouting 
WHERE   scouting.Galaxy = 79 
AND     scouting.ownerGuild = 'TEST' 
ORDER BY    scouting.jumpGate DESC, 
            scouting.astroloc DESC;

الكود الذي قمت بإنشائه بعد القراءة على موقع Microsoft على الويب لمشكلة Greatest N Per Group هو كما يلي:

Select  scouting.astroLoc, 
        scouting.galaxy, 
        scouting.jumpGate, 
        scouting.ownerGuild 
From    galaxy Inner Join 
        scouting On galaxy.[galaxy_ID] = scouting.galaxy 
Where   scouting.ownerGuild = 'SWARM' 
AND     (scouting.jumpGate) In (Select Top 3 scouting.jumpGate From scouting Where scouting.galaxy = galaxy.[galaxy_ID] Order By scouting.jumpGate Desc) 
Order By    scouting.astroLoc Desc, 
            scouting.jumpGate Desc

في الأساس، هذا قريب جدًا مما أريد.يبدو أن كل شيء يعمل.ومع ذلك، فإن بعض المجموعات لا يتم تمثيلها في الإخراج حتى بعد النظر في البيانات، كل مجموعة لديها سجل يفي بقيود الاستعلام.بالمناسبة، إذا قمت بإزالة قيد scouting.ownerGuild = 'SWARM'، فإنه يعمل بشكل مثالي (لكنني بحاجة إلى هذا القيد).

هل كانت مفيدة؟

المحلول

ماذا عن:

Select  scouting.astroLoc, 
        scouting.galaxy, 
        scouting.jumpGate, 
        scouting.ownerGuild 
From    galaxy Inner Join 
        scouting On galaxy.[galaxy_ID] = scouting.galaxy 
WHERE   (scouting.ID) In (
             Select Top 3 scouting.ID
             From scouting 
             Where scouting.galaxy = galaxy.[galaxy_ID] 
             And scouting.ownerGuild = 'SWARM' 
             Order By scouting.jumpGate Desc) 
Order By    scouting.astroLoc Desc, 
                scouting.jumpGate Desc

وإلا فمن المحتمل أن تشمل المراكز الثلاثة الأولى بعضًا منها

  where scouting.ownerGuild <> 'SWARM' 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top