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

如何将SQL查询整列数据转为行?图书馆数据库查询结果调整

解决SQL查询中平装书分类数据从重复列转为单独行的问题

要实现把平装书的Genre/Subject和Age up to转为单独行,与硬皮书数据同列展示,你需要用UNION ALL将硬皮书数据集和平装书数据集分开查询后合并——原查询的结构导致平装书数据被重复输出,而ISNULL/COALESCE仅处理单行内的空值替换,无法解决这种跨列转成行的需求。

修改后的查询语句

-- 查询硬皮书的分类数据
SELECT 
    lc.catalogID, 
    hb_g.intro AS 'Genre/Subject', 
    gk.kidsAge AS 'Age up to'
FROM 
    library.libraryCatalog lc
INNER JOIN 
    library.hardbacks hb ON lc.catalogID = hb.catalogId
LEFT JOIN 
    library.genres hb_g ON hb.genreId = hb_g.genreId 
LEFT JOIN 
    library.bookSeries bs ON hb.id = bs.logId
LEFT JOIN 
    library.genreKids gk ON bs.kidsId = gk.kidsId
WHERE 
    lc.libraryID = 87
    AND hb_g.intro IS NOT NULL -- 过滤无分类的硬皮书(可选)
UNION ALL
-- 查询平装书的分类数据,单独作为一行
SELECT 
    lc.catalogID, 
    pb_g.intro AS 'Genre/Subject', 
    pb.ageRange AS 'Age up to'
FROM 
    library.libraryCatalog lc
INNER JOIN 
    library.paperbacks pb ON lc.catalogID = pb.catalogId
LEFT JOIN 
    library.genres pb_g ON pb.genreId = pb_g.genreId
WHERE 
    lc.libraryID = 87
    AND pb_g.intro IS NOT NULL -- 过滤无分类的平装书(可选)

效果说明

  • 第一部分查询输出所有硬皮书的分类行,与你原查询的前6行对应;
  • 第二部分查询单独输出平装书的Fairy Tales/12+作为一行;
  • UNION ALL将两部分结果合并为一个结果集,完全匹配你想要的输出格式。

如果担心平装书数据可能重复(比如同一catalogID对应多条平装书记录),可将UNION ALL替换为UNION来去重,但UNION ALL性能更优,适合确定无重复的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:52:52