Sql 如何返回';其中值为';条款
Oracle11g 我想知道是否有球员打过游击手。然而,一名球员 甚至可能不在我的桌子上,但我仍然想为那个球员返回一排。在本例中,玩家3不在表中,但我想返回一行 选择标准 若玩家至少有一个游击手记录,那个么只返回一行“是” 若玩家至少有一个记录,并且没有一个是游击手,那个么只返回一行,没有 如果玩家没有记录,那么只返回一行 查询Sql 如何返回';其中值为';条款,sql,oracle11g,Sql,Oracle11g,Oracle11g 我想知道是否有球员打过游击手。然而,一名球员 甚至可能不在我的桌子上,但我仍然想为那个球员返回一排。在本例中,玩家3不在表中,但我想返回一行 选择标准 若玩家至少有一个游击手记录,那个么只返回一行“是” 若玩家至少有一个记录,并且没有一个是游击手,那个么只返回一行,没有 如果玩家没有记录,那么只返回一行 查询 with baseball_players as (select 1 as player_id, 'SHORTSTOP' as position from dual
with baseball_players as
(select 1 as player_id, 'SHORTSTOP' as position from dual union all
select 1 as player_id, 'FIRSTBASE' as position from dual union all
select 2 as player_id, 'FIRSTBASE' as position from dual)
select player_id, case position
when 'SHORTSTOP' then 'YES'
else 'NO'
end has_played
from baseball_players
where player_id in (1,2,3)
问题:如何编写查询以获得所需的结果
所需输出
PLAYER_ID HAS_PLAYED
----------------------
1 YES
2 NO
3 NO
不要使用where子句,而是创建一个临时表,在创建的表中插入值并左键联接 如果为空,则使用case语句表示否,否则使用YES。这样如何:
WITH playerList AS
(
SELECT
1 player_id
FROM
dual
UNION
SELECT
2
FROM
dual
UNION
SELECT
3
FROM
dual
)
, baseball_players as
(
select 1 as player_id, 'SHORTSTOP' as position from dual union all
select 1 as player_id, 'FIRSTBASE' as position from dual union all
select 2 as player_id, 'FIRSTBASE' as position from dual
)
SELECT
pl.player_id
, MAX(CASE WHEN bp.position = 'SHORTSTOP' THEN 'YES' ELSE 'NO' END)
FROM
playerList pl
LEFT JOIN
baseball_players bp
ON
bp.player_id = pl.player_id
GROUP BY
pl.player_id
你的问题是什么?我刚刚在OP中添加了一个问题。你将如何将
玩家id
传递给查询?你能把桌子的结构贴出来吗?