SQL在WHERE子句中选择

时间:2012-03-28 18:10:19

标签: sql select

我有一个包含这些列的表(daystable):idtask_id1234567。本周从星期日开始,因此第1场是星期日到星期六。

例如,一行数据可能如下所示:

 id | task_id | 1 | 2 | 3 | 4 | 5 | 6 | 7
----+---------+---+---+---+---+---+---+---
  1 |       3 | 7 | 0 | 2 | 0 | 0 | 0 | 0

该表的想法是包含我想要在那天运行查询的天数,1-7是一周中的几天。我开始只有一个0或1,1,以便在那天运行查询。 0不要运行它。但我一直坚持如何使查询工作,所以我决定如下:

DECLARE @myvar int;
SET @myvar = DATEPART(WEEKDAY,GETDATE());
SELECT * 
FROM  daystable 
WHERE ([1] = @myvar OR [2] = @myvar OR [3] = @myvar OR [4] = @myvar 
        OR [5] = @myvar OR [6] = @myvar OR [7] = @myvar)

SELECT t1.name, t2.id, t2.start, t2.end, t3.Description, dt.task_id
FROM   task1 AS t1 
INNER JOIN task2 AS t2 
    ON t1.task_id = t2.id 
LEFT OUTER JOIN task3 AS t3 
    ON t2.id = t3.task_id 
LEFT OUTER JOIN daystable AS dt 
    ON t3.task_id = t3.task_id 
LEFT OUTER JOIN

所以我的想法是数据中的0保持不变,但是从DATEPART(WEEKDAY,GETDATE())返回的星期几中我改变了1

所以,如果我想在星期二的第3场(星期日为1)运行任务,数据将为2,如果我希望它在星期日运行,则字段1将有7(星期日DATEPART的输出) )

这似乎工作正常,但可能有点混乱(无法想到另一种方式)

我的第一个select查询返回daystable中包含与@myvar

相同编号的行

第二个查询从该查询中提取所需的数据。

我的问题是我需要加入两个查询,所以我得到了一个输出。 task.id是链接所有表的字段。

我试过了:

DECLARE @myvar int;
SET @myvar = DATEPART(WEEKDAY,GETDATE());
SELECT   t1.name, t2.id, t2.start, t2.end, t3.Description, dt.task_id
FROM  task1 AS t1 
INNER JOIN task2 AS t2 
    ON t1.task_id = t2.id 
LEFT OUTER JOIN task3 AS t3 
    ON t2.id = t3.task_id 
LEFT OUTER JOIN daystable AS dt 
    ON t3.task_id = t3.task_id 
LEFT OUTER JOIN
WHERE t1.task_id = (SELECT * 
                    FROM  daystable 
                    WHERE ([1] = @myvar OR [2] = @myvar OR [3] = @myvar 
                            OR [4] = @myvar OR [5] = @myvar 
                            OR [6] = @myvar OR [7] = @myvar))

但这似乎没有用,现在我被卡住了。

也许我设计了错误的表格,但我无法通过另一种方式将几周的某些日子与任务联系起来。

感谢任何帮助

1 个答案:

答案 0 :(得分:1)

想想我自己解决了这个问题,我用过:

    WHERE t1.task_id IN (SELECT task_id                      
                 FROM  daystable                       
                 WHERE ([1] = @myvar OR [2] = @myvar
                 OR [3] = @myvarOR [4] = @myvar 
                 OR [5] = @myvar OR [6] = @myvar OR [7] = @myvar)) 

这似乎工作正常。如果有人能想到更好的方法,请随时分享。

但与此同时,谢谢你的期待。