条件SQL查询

条件SQL查询,sql,sql-server,database,Sql,Sql Server,Database,我有一个需要设置条件的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

我有一个需要设置条件的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,则在视频Id=1的情况下使特色列为真。
如果视频计数大于1,则将所有特色列标记为false,然后将观看的前5个视频设置为特色

数据库是SQL Server


谢谢,

如果这是在sql server过程中,您可以执行以下操作:

DECLARE @VideoCount INT

SELECT @VideoCount = COUNT(*) FROM tbl_Video

IF @VideoCount = 1
BEGIN
   UPDATE tbl_Video SET
   [Featured] = 1
    WHERE [VideoId] = 1
   GO
END
ELSE IF @VideoCount > 1
BEGIN
   UPDATE tbl_Video SET
   [Featured] = 0
   WHERE [Featured] = 1
   GO
END
declare @videoCount integer

--this is just a guess at what video count is
select @videoCount = count(*) from tbl_video

if (@videoCount = 1)
    UPDATE tbl_Video SET
    [Featured] = 1
    WHERE [VideoId] = 1
ELSE IF (@videoCount > 1)
BEGIN
    UPDATE tbl_Video SET
    [Featured] = 0
    WHERE [Featured] = 1

    UPDATE tbl_Video SET
    [Featured] = 1
    WHERE VideoId In (SELECT TOP 5 VideoId FROM tbl_Video ORDER BY Views DESC)
END

如果您已经有
@videoCount
变量,该变量为
非空

--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

您可以在一个查询中完成此操作:

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
更新电视

set Featured=case当rn时您使用的是什么数据库服务器?我使用的是MS SQL对不起,我现在编辑了我的问题来说明这一点。谢谢。只是猜测一下,但是-您是否确实希望
按视图描述从tbl#U视频顺序中选择前5名视频ID
,而不是像
按y从tbl#U视频y组中选择前5名视频ID。视频ID按和排序(y.[视图])描述