0

私は上司から興味深い課題を与えられました。ページ上の特定の広告主を抽出するためのデータセットがありますが、あなたがログインしている広告主である場合、彼は人の広告が最初に表示されることを確認したいと考えています。現在のスクリプトは次のとおりです。

SELECT TOP 15
a.MemberID,             -- 0
a.UserName,             -- 1
a.MemberDisplayName,    -- 2
a.NYKABizName           -- 3
FROM Member a
INNER JOIN AdDisplay b ON b.MemberID = a.MemberID
WHERE a.Claimed = 'Y'
AND a.NYKACatID IS NOT NULL
AND b.LocalPageID = @LocalPageID
AND a.SBIcon = 'N'
AND a.Viewable = 'Y'
AND a.ProfileTypeID <> 1
AND a.PackageType <> 'G'
AND a.PackageType <> 'P'
AND a.PackageType <> 'C'
ORDER BY PackageType ASC

Include MemberID = 102 のようなものを追加したいと考えています。このスクリプトを変更して上司の希望を実現するにはどうすればよいですか。

よろしくお願いします。

ネオジャキー

4

3 に答える 3

4

クエリが問題の広告主 (上位 15 を除く) を返すと仮定すると、order by 句を変更してこれを行うことができます。

order by (case when MemberId = 102 then 0 else 1 end),
         PackageType ASC

これにより、目的のメンバーが最初に配置され、その後に他のすべてが続くようにリストが並べ替えられます。クエリの上位 15 を引き続き保持できます。

于 2012-07-12T15:51:20.577 に答える
0

ここでは多くのことを想定していますが、その考えは、ログイン ユーザー テーブルをクエリに追加し、そのテーブルにレコードを持つすべての人が表示されるようにすることです。

SELECT TOP 15
a.MemberID,             -- 0
a.UserName,             -- 1
a.MemberDisplayName,    -- 2
a.NYKABizName           -- 3
FROM Member a
INNER JOIN AdDisplay b ON b.MemberID = a.MemberID
LEFT OUTER JOIN LoggedInUsers l ON a.MemberID = l.MemberID
WHERE (a.Claimed = 'Y'
AND a.NYKACatID IS NOT NULL
AND b.LocalPageID = @LocalPageID
AND a.SBIcon = 'N'
AND a.Viewable = 'Y'
AND a.ProfileTypeID <> 1
AND a.PackageType <> 'G'
AND a.PackageType <> 'P'
AND a.PackageType <> 'C')
OR l.MemberID IS NOT NULL
ORDER BY IF(l.MemberID IS NOT NULL,0,1), PackageType ASC

もちろん、MemberID = 102 を常に静的に含めたい場合は、@GordonLinoff の答えが正しいものです。多分私はあなたの質問を読みすぎています。

于 2012-07-12T15:51:59.583 に答える
0

最初のクエリに似ているが、ログインしたメンバーの結果のみを返す 2 番目のクエリを作成し、両方のクエリに追加の値を含めて、それらがどのサブクエリから来たかを識別し、それらを結合して、外側のそれらから選択することができます。それらを注文するクエリ。

私はそれが実行中の文であることを知っているので、コードで詳しく説明できるかどうか見てみましょう...

SELECT TOP 15 * FROM (
    SELECT
      0 as loginStatus,
      a.MemberID,             -- 0 
      a.UserName,             -- 1 
      a.MemberDisplayName,    -- 2 
      a.NYKABizName           -- 3 
    FROM Member a 
    INNER JOIN AdDisplay b 
    ON b.MemberID = a.MemberID 
    WHERE a.Claimed = 'Y' 
    AND a.NYKACatID IS NOT NULL 
    AND b.LocalPageID = @LocalPageID 
    AND a.SBIcon = 'N' 
    AND a.Viewable = 'Y' 
    AND a.ProfileTypeID <> 1 
    AND a.PackageType <> 'G' 
    AND a.PackageType <> 'P' 
    AND a.PackageType <> 'C' 
    AND a.MemberID IN (@memberIdList)

    UNION

    SELECT
      1 as loginStatus,
      a.MemberID,             -- 0 
      a.UserName,             -- 1 
      a.MemberDisplayName,    -- 2 
      a.NYKABizName           -- 3 
    FROM Member a 
    INNER JOIN AdDisplay b 
    ON b.MemberID = a.MemberID 
    WHERE a.Claimed = 'Y' 
    AND a.NYKACatID IS NOT NULL 
    AND b.LocalPageID = @LocalPageID 
    AND a.SBIcon = 'N' 
    AND a.Viewable = 'Y' 
    AND a.ProfileTypeID <> 1 
    AND a.PackageType <> 'G' 
    AND a.PackageType <> 'P' 
    AND a.PackageType <> 'C'
)
ORDER BY loginStatus
于 2012-07-12T15:52:07.587 に答える