如何将整列数据添加为一行?

问题描述 投票:0回答:1

我今天正在处理一个图书馆数据库。该结构有点奇怪,我无法按照我想要的方式提取数据。

我有这样的疑问:

SELECT 
    lc.catalogID, hb_g.intro AS 'Genre/Subject', gk.kidsAge AS 'Ages', 
    pb_g.intro AS 'Genre/Subject', pb.ageRange AS 'Ages'
FROM 
    library.libraryCatalog lc
INNER JOIN 
    library.hardbacks hb ON lc.catalogID = hb.catalogId
INNER JOIN 
    library.paperbacks pb ON lc.catalogID = pb.catalogId
LEFT JOIN 
    library.genres hb_g ON hb.genreId = hb_g.genreId 
LEFT JOIN 
    library.genres pb_g ON pb.genreId = pb_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

它产生如下所示的结果。我遇到的问题是,我需要

Fairy Tales
12+
结果出现在与其他类型相同的列中。

catalogID   Genre/Subject   Age up to   Genre/Subject   Ages
--------------------------------------------------------------
2021        Mystery         8+          Fairy Tales     12+
2021        Sci-Fi/Fantasy  12+         Fairy Tales     12+
2021        Fiction         10+         Fairy Tales     12+
2021        Non-Fiction     12+         Fairy Tales     12+
2021        Biography       16+         Fairy Tales     12+
2021        Historical      10+         Fairy Tales     12+

我希望有这样的事情:

catalogID   Genre/Subject   Age up to   
------------------------------------------
2021        Mystery         8+          
2021        Sci-Fi/Fantasy  12+         
2021        Fiction         10+         
2021        Non-Fiction     12+         
2021        Biography       16+         
2021        Historical      12+         
2021        Fairy Tales     12+  <---- moved here

我尝试使用

ISNULL
COALESCE
但这些都不起作用。

这样的事情可能吗?

sql-server t-sql sql-server-2012
1个回答
0
投票

看起来您需要合并两个单独的结果集,然后重新连接到

catalogID

SELECT 
    lc.catalogID,
    b.GenreOrSubject,
    b.Ages
FROM 
    library.libraryCatalog lc
JOIN (
    SELECT
        hb.catalogId,
        hb_g.intro AS GenreOrSubject,
        gk.kidsAge AS Ages
    FROM
        library.hardbacks hb
    JOIN 
        library.genres hb_g ON hb.genreId = hb_g.genreId 
    JOIN 
        library.bookSeries bs ON hb.id = bs.logId
    JOIN 
        library.genreKids gk ON bs.kidsId = gk.kidsId

    UNION ALL

    SELECT
        pb.catalogID,
        pb_g.intro,
        pb.ageRange
    FROM
        library.paperbacks pb
    JOIN 
        library.genres pb_g ON pb.genreId = pb_g.genreId
) b
    ON lc.catalogID = b.catalogId
WHERE
    lc.libraryID = 87;
© www.soinside.com 2019 - 2024. All rights reserved.