Sql server 2005 SP:随机记录,Fave记录,加上已知记录,无重复
感谢你们很多人的帮助,我得到了下面的代码,非常好用。然而,我意识到我错过了一个重要的信息是不可能的,所以我在这里重新发布了更新的代码来澄清 下面的代码从一个表中获取5条随机记录,再加上一条基于第二个表中标识的用户最喜爱的记录: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 *
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。第一条记录应该总是作为第一条记录出现。希望这能更好的解释?