Sql 比较两列数据案例语句
编写案例语句以再次获得结果我需要将结果列与作业级别列进行比较如果作业级别包含结果中存在的任何一个值,则应在新列ExpectedOutput中返回true或falseSql 比较两列数据案例语句,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'
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