将 case 子句与连接语句一起使用 sql
using case clause with join statement sql
我有以下查询:
select * from isg.tdbFutures f, isg.tdbOption e
where
f.contract = 306121 and
e.underlier = f.entityID
哪个 return 这个:
entityID lastTradeDate expiration firstTradeDate contract lastTradeDate underlier isPut expiration strike entityID optionMetricsID expirationCycle
----------- ---------------- ------------- ----------------- ----------- ---------------- ------------ -------- ------------- --------- ----------- ------------------ ------------------
311320 3/1/2018 3/1/2018 6/22/2017 306123 12/22/2017 311320 false 12/22/2017 100 368145 0 monthly
311320 3/1/2018 3/1/2018 6/22/2017 306123 12/22/2017 311320 false 12/22/2017 106 368146 0 monthly
311320 3/1/2018 3/1/2018 6/22/2017 306123 12/22/2017 311320 false 12/22/2017 120 368147 0 monthly
我想构建一个字符串以插入另一个 table,以 isPut 列为条件。这是我的尝试:
select * from isg.tdbFutures f, isg.tdbOption e
where
f.contract = 306123 and
e.underlier = f.entityID
CASE isPut
WHEN false THEN 'FI_US_M Call'
WHEN true THEN 'FI_US_M Put'
END
但是,我收到以下错误:
>[Error] Script lines: 45-52 ------------------------
SQL Anywhere Error -131: Syntax error near 'false' on line 6
Msg: 102, Level: 15, State: 0
Line: 0
我要插入的 table,其中 category
是我的条件字符串,entityID
是我的 f.contract
值:
category entityID
----------------- -----------
US Equity 66281
US Fixed Income 66283
AUD 66359
正如@GordonLinoff 指出的那样,它不应该是这样的:
select
*,
CASE isPut
WHEN false THEN 'FI_US_M Call'
WHEN true THEN 'FI_US_M Put'
END as my_new_column
from isg.tdbFutures f, isg.tdbOption e
where
f.contract = 306123 and
e.underlier = f.entityID
我想你想要这个
select * 来自 isg.tdbFutures f, isg.tdbOption e ,
案件
当 isPut = false THEN 'FI_US_M Call'
否则 'FI_US_M Put' 结束
在哪里
f.contract = 306123 和
e.underlier = f.entityID
如果要插入另一个table,不应该是这样吗?
insert new_column_from_case = CASE isPut WHEN false THEN 'FI_US_M Call'
WHEN true THEN 'FI_US_M Put'
END
new_f_contract = f.contract
into another_table
from isg.tdbFutures f, isg.tdbOption e
where f.contract = 306123
and e.underlier = f.entityID
您似乎想要的查询是:
select f.*, o.*,
(case when isPut then 'FI_US_M Put'
else 'FI_US_M Call'
end) as new_column
from isg.tdbFutures f join
isg.tdbOption o
on o.underlier = f.entityID
where f.contract = 306123;
备注:
- 学习使用正确、明确的标准
JOIN
语法。 从不 在 FROM
子句中使用逗号。
- 作为最佳实践,您应该列出
select
中的所有列。
- Table别名应该是table名字的缩写,所以我把
e
改成了o
.
case
表达式属于select
.
-
我有以下查询:
select * from isg.tdbFutures f, isg.tdbOption e
where
f.contract = 306121 and
e.underlier = f.entityID
哪个 return 这个:
entityID lastTradeDate expiration firstTradeDate contract lastTradeDate underlier isPut expiration strike entityID optionMetricsID expirationCycle
----------- ---------------- ------------- ----------------- ----------- ---------------- ------------ -------- ------------- --------- ----------- ------------------ ------------------
311320 3/1/2018 3/1/2018 6/22/2017 306123 12/22/2017 311320 false 12/22/2017 100 368145 0 monthly
311320 3/1/2018 3/1/2018 6/22/2017 306123 12/22/2017 311320 false 12/22/2017 106 368146 0 monthly
311320 3/1/2018 3/1/2018 6/22/2017 306123 12/22/2017 311320 false 12/22/2017 120 368147 0 monthly
我想构建一个字符串以插入另一个 table,以 isPut 列为条件。这是我的尝试:
select * from isg.tdbFutures f, isg.tdbOption e
where
f.contract = 306123 and
e.underlier = f.entityID
CASE isPut
WHEN false THEN 'FI_US_M Call'
WHEN true THEN 'FI_US_M Put'
END
但是,我收到以下错误:
>[Error] Script lines: 45-52 ------------------------
SQL Anywhere Error -131: Syntax error near 'false' on line 6
Msg: 102, Level: 15, State: 0
Line: 0
我要插入的 table,其中 category
是我的条件字符串,entityID
是我的 f.contract
值:
category entityID
----------------- -----------
US Equity 66281
US Fixed Income 66283
AUD 66359
正如@GordonLinoff 指出的那样,它不应该是这样的:
select
*,
CASE isPut
WHEN false THEN 'FI_US_M Call'
WHEN true THEN 'FI_US_M Put'
END as my_new_column
from isg.tdbFutures f, isg.tdbOption e
where
f.contract = 306123 and
e.underlier = f.entityID
我想你想要这个
select * 来自 isg.tdbFutures f, isg.tdbOption e , 案件 当 isPut = false THEN 'FI_US_M Call' 否则 'FI_US_M Put' 结束 在哪里 f.contract = 306123 和 e.underlier = f.entityID
如果要插入另一个table,不应该是这样吗?
insert new_column_from_case = CASE isPut WHEN false THEN 'FI_US_M Call'
WHEN true THEN 'FI_US_M Put'
END
new_f_contract = f.contract
into another_table
from isg.tdbFutures f, isg.tdbOption e
where f.contract = 306123
and e.underlier = f.entityID
您似乎想要的查询是:
select f.*, o.*,
(case when isPut then 'FI_US_M Put'
else 'FI_US_M Call'
end) as new_column
from isg.tdbFutures f join
isg.tdbOption o
on o.underlier = f.entityID
where f.contract = 306123;
备注:
- 学习使用正确、明确的标准
JOIN
语法。 从不 在FROM
子句中使用逗号。 - 作为最佳实践,您应该列出
select
中的所有列。 - Table别名应该是table名字的缩写,所以我把
e
改成了o
. case
表达式属于select
.
-