You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL行转列查询缺失数据时如何显示空值而非过滤整条记录

问题原因

你当前使用的是内连接(INNER JOIN),逻辑要求同一个id必须同时存在Name、Gender、Code三类数据才能匹配成功返回记录,id=2缺少Code类型的数据,所以直接被过滤掉了。

解法1:修改JOIN逻辑(适配现有写法)

将Code表的关联改为左连接(LEFT JOIN),同时把Code的类型筛选条件写在JOIN的匹配规则中,避免过滤缺失Code的记录:

SELECT a.id, 
       a.data AS `Name`, 
       b.data AS `Gender`, 
       c.data AS `Code`
FROM table1 a
INNER JOIN table1 b 
  ON a.id = b.id 
  AND a.type = 'Name' 
  AND b.type = 'Gender'
LEFT JOIN table1 c 
  ON a.id = c.id 
  AND c.type = 'Code'

解法2:聚合行转列(更通用推荐)

不需要多次关联表,用条件聚合的方式实现,兼容性更强,后续新增字段也更方便,缺失的字段会自动返回NULL:

SELECT id,
       MAX(CASE WHEN type = 'Name' THEN data END) AS `Name`,
       MAX(CASE WHEN type = 'Gender' THEN data END) AS `Gender`,
       MAX(CASE WHEN type = 'Code' THEN data END) AS `Code`
FROM table1
GROUP BY id

两种写法都可以得到你预期的结果,缺失的Code字段会自动显示为NULL/空值。


内容的提问来源于stack exchange,提问作者Reus ellmy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:06:05