如何将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
相关产品推荐
相关产品推荐

