Sql server 2005 SP:随机记录,Fave记录,加上已知记录,无重复

Sql server 2005 SP:随机记录,Fave记录,加上已知记录,无重复,sql-server-2005,tsql,Sql Server 2005,Tsql,感谢你们很多人的帮助,我得到了下面的代码,非常好用。然而,我意识到我错过了一个重要的信息是不可能的,所以我在这里重新发布了更新的代码来澄清 下面的代码从一个表中获取5条随机记录,再加上一条基于第二个表中标识的用户最喜爱的记录: CREATE PROCEDURE web.getRandomCharities ( @tmp_ID bigint --members ID ) AS BEGIN WITH q AS ( SELECT TOP 5 *

感谢你们很多人的帮助,我得到了下面的代码,非常好用。然而,我意识到我错过了一个重要的信息是不可能的,所以我在这里重新发布了更新的代码来澄清

下面的代码从一个表中获取5条随机记录,再加上一条基于第二个表中标识的用户最喜爱的记录:

CREATE PROCEDURE web.getRandomCharities
   (
   @tmp_ID bigint --members ID
   )
AS
BEGIN

    WITH    q AS
     (
     SELECT  TOP 5 *
     FROM    TBL_CHARITIES
     WHERE   cha_Active = 'TRUE'
             AND cha_Key != '1'
     ORDER BY NEWID()
     )
SELECT  *
FROM    q
UNION ALL
SELECT  TOP 1 *
FROM    (
     SELECT  *
     FROM    TBL_CHARITIES
     WHERE   TBL_CHARITIES.cha_Key IN
             (
             SELECT  members_Favourite
             FROM    TBL_MEMBERS
             WHERE   members_Id = @tmp_ID
             )
     EXCEPT
     SELECT  *
     FROM    q
     ) tc

END
但是,我意识到,如果cha_Key=='1'与上面代码中第二个SELECT语句中返回的记录不同,我还需要包含该记录

希望这有意义


谢谢

我不完全确定我是否理解你,但我相信事情是这样的

五个随机记录,没有1个 一条特定于用户的记录 如果不是用户的特定记录,则记录1

如果是这样的话,我相信这就是:

CREATE PROCEDURE web.getRandomCharities ( @tmp_ID bigint --members ID ) AS BEGIN WITH q AS ( SELECT TOP 5 * FROM TBL_CHARITIES WHERE cha_Active = 'TRUE' AND cha_Key != '1' ORDER BY NEWID() ) SELECT * FROM q UNION ALL SELECT TOP 1 * FROM ( SELECT * FROM TBL_CHARITIES WHERE TBL_CHARITIES.cha_Key IN ( SELECT members_Favourite FROM TBL_MEMBERS WHERE members_Id = @tmp_ID ) EXCEPT SELECT * FROM q ) tc UNION ALL SELECT TOP 1 * FROM ( SELECT * FROM TBL_CHARITIES WHERE TBL_CHARITIES.cha_Key NOT IN ( SELECT members_Favourite FROM TBL_MEMBERS WHERE members_Id = @tmp_ID ) AND (TBL_CHARITIES.cha_Key = '1') EXCEPT SELECT * FROM q ) tc END
您能提供一些示例数据和您想要得到的结果集吗?您最好只编辑原始问题并提供更多详细信息。卡西诺,好的,我想做的就是如上所述的一切,但也要得到我们在第一句话cha_Key中消除的记录1'如果它不是用户最喜欢的记录,正如union语句返回的一样,基本上我想要5条唯一的随机记录,但不是记录1,加上用户最喜欢的记录,如果它不是最喜欢的,再加上记录1。第一条记录应该总是作为第一条记录出现。希望这能更好的解释?