事情是这样的:我有一个表 DailyContent (dailyContentId, userId, weekDayId, eventId),我在其中存储某些天的项目(对于每个用户)。天分为不同的事件(每天更多的事件)。我想做的是选择项目(对于一个事件),但要选择不同的天数。天的 ID 从 1 到 7。如果“选择”天,我得到 dayId,否则我得到 null 作为输入参数。
如果选择多于一天,则仅返回所有天共有的项目。
如果没有选择日期,则不返回任何内容
我已经尝试过这样的事情,但我只得到了一天的结果。如果我选择超过一天,则返回 NOTHING(应返回为该事件存储两天的项目,如上所述)。
DECLARE @daysCount int -- only for incitation how many days are actually set
SET @daysCount = 0
IF (@mon IS NOT NULL)
BEGIN
SET @daysCount = @daysCount+1
END
IF (@tue IS NOT NULL)
BEGIN
SET @daysCount = @daysCount+1
END
IF (@wed IS NOT NULL)
BEGIN
SET @daysCount = @daysCount+1
END
IF (@thu IS NOT NULL)
BEGIN
SET @daysCount = @daysCount+1
END
IF (@fri IS NOT NULL)
BEGIN
SET @daysCount = @daysCount+1
END
IF (@sat IS NOT NULL)
BEGIN
SET @daysCount = @daysCount+1
END
IF (@sun IS NOT NULL)
BEGIN
SET @daysCount = @daysCount+1
END
-- Insert statements for procedure here
SELECT
DailyContent.dailyContentId
FROM DailyContent
WHERE
eventId=@eventId AND (weekDayId=@mon OR
weekDayId=@tue OR
weekDayId=@wed OR
weekDayId=@thu OR
weekDayId=@fri OR
weekDayId=@sat OR
weekDayId=@sun)
GROUP BY DailyContent.dailyContentId
HAVING (COUNT(dailyContentId) = @daysCount)
这个 HAVING COUNT 有问题。如果我删除它,它可以正常工作,但前提是选择了一天。
实际上,我想要“如果参数为空则全选”的反面。
我正在使用 MS SQL 服务器 2008。
任何帮助将不胜感激。