我的公司常驻pl / sql guru本周正在度假,我想我会在这里尝试我的问题大师。我想我的SQL是中等水平的,但是,我是新的Oracle。
我有一个包含3列的表:Id [数字(9,2)],FirstName [VarChar2(20)],LastName [VarChar2(25)]
我正在尝试编写1个可以支持并返回以下内容的sql查询:
我可以在多个查询中执行此操作,但有趣的是。提前谢谢!
答案 0 :(得分:0)
使用union返回单个结果集
或
如果满足给定条件,则使用函数返回字符串:
StringIf(condition,valueToReturnIfTrue,valueToReturnIfFalse)
并在选择中使用它:
SELECT StringIf(t.fname = t.lname,'true','false')为samenames,StringIf(..)为same2,
如果您喜欢,请标记:)
答案 1 :(得分:0)
假设您有另一个表cmpTable ( cmpId, cmpFirstName, cmpLastName )
具有相同的列定义并且cmpID用于存储候选集的PK,
select cmpId
CASE 4 * eqID + 2 * eqFN + eqLN
WHEN 7 THEN 'Enrolled'
WHEN 5 THEN 'FirstName Does Not Match'
WHEN 6 THEN 'LastName Does Not Match'
WHEN 4 THEN 'FirstName & LastName Does Not Match'
ELSE 'Not Enrolled'
END
from (
select cmpId
, CASE ID WHEN cmpID THEN 1 ELSE 0 END eqID
, CASE FirstName WHEN cmpFirstName THEN 1 ELSE 0 END eqFN
, CASE LastName WHEN cmpLastName THEN 1 ELSE 0 END eqLN
from table t1
join cmpTable ct ON ( ct.cmpID = t1.ID )
union
select cmpId
, 0 eqID
, 0 eqFN
, 0 eqLN
from cmpTable
where not exists (
select 1
from table t2
where t2.ID = cmpID
)
)
;