Sql 给定一组数值,计算得出结果的组合

Sql 给定一组数值,计算得出结果的组合,sql,math,combinations,sql-server-2014,Sql,Math,Combinations,Sql Server 2014,我有一个SQL Server查询,显示每周运行的所有代理作业。我想知道它们在哪几天运行 我有以下疑问 SELECT j.name, CASE WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 2) -- a job with a daily recurrance or weekly on this day THEN 1 END AS Monda

我有一个SQL Server查询,显示每周运行的所有代理作业。我想知道它们在哪几天运行

我有以下疑问

SELECT  j.name,
        CASE
            WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 2) -- a job with a daily recurrance or weekly on this day
            THEN 1
        END AS Monday,
        CASE
            WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 3) 
            THEN 1
        END AS Tuesday,
        CASE
            WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 4) 
            THEN 1
        END AS Wednesday,
        CASE
            WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 5) 
            THEN 1
        END AS Thursday,
        CASE
            WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 6) 
            THEN 1
        END AS Friday,
        CASE
            WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 7) 
            THEN 1
        END AS Saturday,
        CASE
            WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 1) 
            THEN 1
        END AS Sunday,
        s.freq_interval
FROM    msdb.dbo.sysjobschedules js
        JOIN msdb.dbo.sysschedules s
            ON js.schedule_id = s.schedule_id
        JOIN msdb.dbo.sysjobs j
            ON js.job_id = j.job_id
WHERE   j.enabled = 1 AND
        s.enabled = 1 AND
        s.freq_type = 8
s.freq_interval列是以下值组合的总和

1 = Sunday
2 = Monday
4 = Tuesday
8 = Wednesday
16 = Thursday
32 = Friday
64 = Saturday
因此,如果作业计划在星期二和星期四运行,则s.freq_间隔将为4+16=20 如果作业计划在周五、周六和周日运行,则s.freq_间隔将为32+64+1=97

如何获取s.freq_interval中的值并计算出与该数字相加的值的组合?

您可以使用&位运算符来执行此操作:

SELECT *
FROM (VALUES(1 ,'Sunday'),
            (2 ,'Monday'),
            (4 ,'Tuesday'),
            (8 ,'Wednesday'),
            (16,'Thursday'),
            (32,'Friday'),
            (64,'Saturday'))V(FrequencyInt, FrequnecyDay)
     JOIN (VALUES(20),(97),(13),(8)) J(Freq) ON V.Frequencyint & J.Freq != 0;

谢谢-将此应用于我的解决方案