Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 比较两列数据案例语句_Sql_Sql Server - Fatal编程技术网

Sql 比较两列数据案例语句

Sql 比较两列数据案例语句,sql,sql-server,Sql,Sql Server,编写案例语句以再次获得结果我需要将结果列与作业级别列进行比较如果作业级别包含结果中存在的任何一个值,则应在新列ExpectedOutput中返回true或false select Email, Job_Levels,Answer, case when answer = 'Assessor / Trainer' then 1 when answer = 'Administrator / Coordinator/ Assistant' then 2 when answer = 'Adviser'

编写案例语句以再次获得结果我需要将结果列与作业级别列进行比较如果作业级别包含结果中存在的任何一个值,则应在新列ExpectedOutput中返回true或false

select Email, Job_Levels,Answer,
case when answer = 'Assessor / Trainer' then 1
when answer = 'Administrator / Coordinator/ Assistant' then 2
 when answer = 'Adviser' then 3
  when answer = 'Apprentice' then 4
  when answer = 'Deputy / Vice Principal' then 5
  when answer = 'Chief Executive / Principal' then 6 
when answer = 'Technician' then 18
  when answer = 'Worker / Practitioner' then 19
 end as result  
 from TBL_CandidateInfo
 inner join tal_users
 on Userid = UserID_FK
  inner join [ABC_Migration].[dbo].[ABCSeeker]
 on email = susername
WHERE ProfileQuestion='What is your preferred job role / level?'
电流输出

Email         Job_Levels    Answer                result
a@gmail.com   2,1,16        Assessor / Trainer    1
b@gmail.com   2,1,16        Teaching / Lecturing  16
c@yahoo.com   12,16,18      Learner Suppor        12
预期产出:

Email         Job_Levels    Answer               result  ExpectedOutput
a@gmail.com   2,1,16        Assessor / Trainer   1        True
b@gmail.com   2,1,16        Teaching / Lecturing 16       True
c@yahoo.com   16,18         Learner Suppor       12       False
编辑: 虽然此答案已被接受,但请注意此解决方案存在一些警告。有关更简单的方法,请参见@GuidoG的答案

我想你在找这样的东西:

SELECT  Email
,       Job_Levels
,       Answer
,       result
,       CASE
            WHEN Job_Levels LIKE '%' + CONVERT(VARCHAR(2), result) + '%' THEN 'true'
            ELSE 'False'
        END AS ExpectedOutput
FROM    (
            SELECT Email, Job_Levels,Answer,
            case 
                    WHEN answer = 'Assessor / Trainer' then 1
                    WHEN answer = 'Administrator / Coordinator/ Assistant' then 2
                    WHEN answer = 'Adviser' then 3
                    when answer = 'Apprentice' then 4
                    WHEN answer = 'Deputy / Vice Principal' then 5
                    WHEN answer = 'Chief Executive / Principal' then 6 
                    WHEN answer = 'Technician' then 18
                    WHEN answer = 'Worker / Practitioner' then 19
             end as result  
             from TBL_CandidateInfo
             inner join tal_users
             on Userid = UserID_FK
              inner join [ABC_Migration].[dbo].[ABCSeeker]
             on email = susername
            WHERE ProfileQuestion='What is your preferred job role / level?'
        ) T
一个选项是使用CharIndexfunction

请注意,我添加了一个额外的,只是为了确保我没有得到真正的时候,寻找1,没有1,但有16。 换句话说,需要额外的值来确保查找1不会返回值16的true,而只返回精确值1

您的查询将如下所示

select t.Email,
       t.Job_Levels,
       t.Answer,
       t.result,
       case when charindex(t.result + ',', t.Job_Levels + ',') > 0 then 'true' else 'false' end as ExpectedOutput
from   ( select Email, Job_Levels,Answer,
                case when answer = 'Assessor / Trainer' then 1
                     when answer = 'Administrator / Coordinator/ Assistant' then 2
                     when answer = 'Adviser' then 3
                     when answer = 'Apprentice' then 4
                     when answer = 'Deputy / Vice Principal' then 5
                     when answer = 'Chief Executive / Principal' then 6 
                     when answer = 'Technician' then 18
                     when answer = 'Worker / Practitioner' then 19
                end as result
         from TBL_CandidateInfo
           inner join tal_users on Userid = UserID_FK
           inner join [ABC_Migration].[dbo].[ABCSeeker] on email = susername
         WHERE ProfileQuestion='What is your preferred job role / level?'
      ) t

用这个。请注意,如果我们不在[co].[Job_Level]前后使用“,”,则结果可能不正确。例如,IDS111113在LIKE%11%语句中都显示为true结果,但113不是正确的结果。但是我的查询使用了,比如,11%,并且对于,113,返回false

SELECT      co.*
            ,CASE WHEN Convert(varchar(MAX),',' + [co].[Job_Levels] + ',') Like '%,' + Convert(varchar(MAX),[co].[result]) + ',%' THEN
                1 --true
            ELSE 
                0 --false
            END as ExpectedOutput
FROM        (
                select Email, Job_Levels,Answer,
                case when answer = 'Assessor / Trainer' then 1
                when answer = 'Administrator / Coordinator/ Assistant' then 2
                 when answer = 'Adviser' then 3
                  when answer = 'Apprentice' then 4
                  when answer = 'Deputy / Vice Principal' then 5
                  when answer = 'Chief Executive / Principal' then 6 
                when answer = 'Technician' then 18
                  when answer = 'Worker / Practitioner' then 19
                 end as result  
                 from TBL_CandidateInfo
                 inner join tal_users
                 on Userid = UserID_FK
                  inner join [ABC_Migration].[dbo].[ABCSeeker]
                 on email = susername
                WHERE ProfileQuestion='What is your preferred job role / level?'
            ) co

如果您正在查找1,但它不包含1,但包含16,该怎么办?那么这会给出一个正值吗?如果作业单元级别包含2,1,16,结果列包含值1,则其中的值应与作业单元级别进行比较,如果值1存在于2,1,16中,则为真。在本例中,它包含1,所以它是真的。@Arfat但是如果job_level包含2、3、16,而result包含1呢?当前在这种情况下,此答案将返回TRUE。我添加了一个解决该问题的答案
SELECT      co.*
            ,CASE WHEN Convert(varchar(MAX),',' + [co].[Job_Levels] + ',') Like '%,' + Convert(varchar(MAX),[co].[result]) + ',%' THEN
                1 --true
            ELSE 
                0 --false
            END as ExpectedOutput
FROM        (
                select Email, Job_Levels,Answer,
                case when answer = 'Assessor / Trainer' then 1
                when answer = 'Administrator / Coordinator/ Assistant' then 2
                 when answer = 'Adviser' then 3
                  when answer = 'Apprentice' then 4
                  when answer = 'Deputy / Vice Principal' then 5
                  when answer = 'Chief Executive / Principal' then 6 
                when answer = 'Technician' then 18
                  when answer = 'Worker / Practitioner' then 19
                 end as result  
                 from TBL_CandidateInfo
                 inner join tal_users
                 on Userid = UserID_FK
                  inner join [ABC_Migration].[dbo].[ABCSeeker]
                 on email = susername
                WHERE ProfileQuestion='What is your preferred job role / level?'
            ) co