Sql 如何返回';其中值为';条款

Sql 如何返回';其中值为';条款,sql,oracle11g,Sql,Oracle11g,Oracle11g 我想知道是否有球员打过游击手。然而,一名球员 甚至可能不在我的桌子上,但我仍然想为那个球员返回一排。在本例中,玩家3不在表中,但我想返回一行 选择标准 若玩家至少有一个游击手记录,那个么只返回一行“是” 若玩家至少有一个记录,并且没有一个是游击手,那个么只返回一行,没有 如果玩家没有记录,那么只返回一行 查询 with baseball_players as (select 1 as player_id, 'SHORTSTOP' as position from dual

Oracle11g

我想知道是否有球员打过游击手。然而,一名球员 甚至可能不在我的桌子上,但我仍然想为那个球员返回一排。在本例中,玩家3不在表中,但我想返回一行

选择标准

若玩家至少有一个游击手记录,那个么只返回一行“是”

若玩家至少有一个记录,并且没有一个是游击手,那个么只返回一行,没有

如果玩家没有记录,那么只返回一行

查询

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
传递给查询?你能把桌子的结构贴出来吗?