SQL Server - 为什么左连接在我的查询中不起作用?

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

这些是我的桌子 - 我还没有创建表,我无法修改数据库中的任何内容。

桌子 - 书

BookID  Name
1       Book1
2       Book2
3       Book3
4       NonAvb-Book4
5       Book5

表格 - 书籍详细信息

该表包含与书籍相关的各种属性。每行都有一个 BookID、Code(表示它是什么属性)和 Attribute。

BookID      Code      Value
1           100      Classic
1           101       YES
1           102        1
1           103      InStock
2           100       Modern
3           100       Classic
3           102        1
3           103       OutOfStock
4           100       Classic
4           102        3
4           103       InStock

现在,我必须为一组特定的图书 ID 创建查询,以便输出应如下所示。

输出

BookID  Name         IsNonAvb   IsCode102SetAs1 IsCode101Active 
1       Book1          N             Y             Y    
2       Book2          N             N             N    
3       Book3          N             Y             N    
4       NonAvb-Book4   Y             N             N
5       Book5          N             N             N    

我编写的查询以上述格式提供输出,但是当 BookDetails 表中没有数据的书籍时,该书籍 ID 不会在最终结果集中列出。

我的查询 -

SELECT b.BookID,
       b.Name,
       CASE WHEN LOWER(b.BookName) LIKE 'NonAvb%' THEN 'Y' ELSE 'N' END AS IsNonAvb,
       CASE WHEN MAX(CASE WHEN bd.Code = 102 AND bd.Value = '1' THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' END AS IsCode102SetAs1,
       CASE WHEN MAX(CASE WHEN bd.Code = 101 AND bd.Value = 'YES' THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' END AS IsCode101Active   
FROM Book b 
LEFT JOIN BookDDetails bd ON b.BookID = bd.BookID
WHERE b.BookID IN (1,2,3,4,5)
GROUP BY b.BookID, b.Name;

我的输出:

BookID  Name         IsNonAvb   IsCode102SetAs1 IsCode101Active 
1       Book1          N             Y             Y    
2       Book2          N             N             N    
3       Book3          N             Y             N    
4       NonAvb-Book4   Y             N             N    

Book5 丢失,因为 BookDetail 表中没有详细信息。

请帮忙。谢谢!

sql-server left-join
1个回答
-1
投票

您的查询有一些问题

  1. B.BookName 不是列。应该是B.Name
  2. BookDDetails 不是表格。应该是书籍详情
© www.soinside.com 2019 - 2024. All rights reserved.