我有一个包含这些列的表(daystable):id
,task_id
,1
,2
,3
,4
, 5
,6
和7
。本周从星期日开始,因此第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))
但这似乎没有用,现在我被卡住了。
也许我设计了错误的表格,但我无法通过另一种方式将几周的某些日子与任务联系起来。
感谢任何帮助
答案 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))
这似乎工作正常。如果有人能想到更好的方法,请随时分享。
但与此同时,谢谢你的期待。