1

またはWHEREに基づいて別の句を使用する方法を知りたいです。ステートメントの残りの部分は複雑であるため、私は. ただし、ケースは値にのみ使用されることは知っています。私の問題の簡単なバージョンを以下に複製しました。CASEIFCASE

基本的に、私は3つのテーブルを持っています。1 つ目は、マスター情報 (MasterTable) を含みます。2 番目には、マスター テーブル (Table1) に属する 1 対多のリレーションシップが含まれています。3 番目は、Table1 のどのレコードがこのインスタンスで使用されるかを示すセレクターのリストです。OrderNum よりも SubID を優先して、Table2 の最新のレコードが Table1 から選択されたものを駆動するようにします。

マスターテーブル | マスター ID、その他の情報

表1 | T1UniqueId、MasterID、SubID、Text、OrderNum

表2 | T2UniqueId、MasterID、SubID、OrderNum、日付

SELECT MasterID, OtherInfo, SubID
FROM MasterTable
OUTER APPLY(
    SELECT TOP 1 SubID FROM Table1
    WHERE Table1.MasterID=MasterTable.MasterID
    CASE
        WHEN 
        (
            SELECT TOP 1 SubID FROM Table2 
            WHERE Table2.MasterID=MasterTable.MasterID 
            ORDER BY Date DESC
        ) Is NULL
        THEN Table1.OrderNum=
            (
                SELECT TOP 1 OrderNum 
                FROM Table2
                WHERE Table2.MasterId=MasterTable.MasterId
                ORDER BY Date DESC
            )
        ELSE Table1.SubId=
            (
                SELECT TOP 1 SubId
                FROM Table2
                WHERE Table2.MasterId=MasterTable.MasterId
                ORDER BY Date DESC
            )
    END

) SubData
4

2 に答える 2

0

Table1 と Table2 の SubID と OrderNum が同じ場合は、ネストされた select ステートメントを使用して単純なクエリを使用できます。

select m.MasterID, m.OtherInfo, (
  select top 1 coalesce(t2.SubID, t2.OrderNum) from Table2 t2
  where t2.MasterID = m.MasterID order by date desc
) as SubID
from MasterTable m;
于 2013-09-27T13:32:19.080 に答える