1

条件付きにする必要がある SQL クエリがあります。現在の SQL クエリは次のとおりです。

-- IF the video count is 1
    UPDATE tbl_Video SET
    [Featured] = 1
    WHERE [VideoId] = 1
    GO
-- ELSE IF Video Count is greater than 1
    UPDATE tbl_Video SET
    [Featured] = 0
    WHERE [Featured] = 1
    GO
    -- Set the top 5 viewed videos as featured as default
    UPDATE tbl_Video SET
    [Featured] = 1
    WHERE VideoId In (SELECT TOP 5 VideoId FROM tbl_Video
    ORDER BY Views DESC)
    GO
-- END

上記のクエリのコメントで、私が達成しようとしていることを説明できれば幸いです。シナリオは次のとおりです。

ビデオ カウントが 1 の場合、注目の列を true にします。ここで、ビデオ Id = 1 です。
ビデオ カウントが 1 より大きい場合は、すべての注目の列を false としてマークし、上位 5 つの視聴済みビデオを注目のビデオにします。

データベースは SQL Server です。

ありがとう、

4

4 に答える 4

1

すでに@videoCount変数がある場合not null

--Using case
update tbl_Video SET
    [Featured] = case when @videoCount = 1 then 0 
                      when @videoCount > 0 end --else [Featured] end
where [VideoId] = 1

--Using cte
;with cte as 
(
    select top (5) * 
    from tbl_Video
    order by Views desc
)
update cte set [Featured] = 1
于 2012-12-24T09:35:40.617 に答える
0

1 つのクエリでそれを実行できる場合があります。

update  tv
set     Featured = case when rn <= 5 then 1 else 0 end
from    (
        select  row_number() over (order by ViewCount desc) as rn
        ,       *
        from    tbl_Video
        ) tv

動画が 1 つしかない場合は、再生回数の上位 5 位以内に収まっている必要があるため、特別なケースは必要ありません。

SQL Fiddle での実例。

于 2012-12-24T09:38:12.887 に答える