表:
ConditionId ContentId
10004 101
10004 102
10001 104
10001 103
10001 115
上記のデータから、特定の ConditionID の TOP N レコードを選択し、それを別の条件 ID からの上位 N の結果の別のセットとマージする必要があります。
例: 条件 ID 10001 の場合は 2 つの結果が表示され、条件 ID 10004 の場合は上位 3 つの結果が表示されます (これらの結果は両方とも一意であり、重複しない必要があります)。
私はそれをできた :
SELECT top(2) * FROM TABLEA
WHERE Conditionid = 10001
UNION
SELECT top(3) * FROM TABLEA
WHERE Conditionid = 10004
ただし、これは限定的なシナリオであり、要求される条件 ID は、上記のシナリオの 2 つではなく、複数になる可能性があります。
パフォーマンス上の理由から動的 SQL を書きたくないのですが、ConditionId IN() を使用して同様のことを行う方法はありますか?
編集:
上位 2 位と上位 3 位の結果は contentid と重複してはならないため、特定の contentid が既にクエリ 1 の一部である場合、それは次の上位 N の一部であってはなりません。