查看表SQL Server
我想创建一个视图,显示图书标题和对特定图书的评论数量 当值不兼容时,有哪些选项 Books表中的相关列:查看表SQL Server,sql,sql-server,tsql,Sql,Sql Server,Tsql,我想创建一个视图,显示图书标题和对特定图书的评论数量 当值不兼容时,有哪些选项 Books表中的相关列: ISBN13 PK bigint Title nvarchar(50) Language nvarchar(30) Author Id FK int Category ID FK int 样本数据手册: INSERT INTO Books VALUES (9783852913735, 'Ulysses', 'English', 100, 'January 06, 2002', 1, nu
ISBN13 PK bigint
Title nvarchar(50)
Language nvarchar(30)
Author Id FK int
Category ID FK int
样本数据手册:
INSERT INTO Books VALUES (9783852913735, 'Ulysses', 'English', 100, 'January 06, 2002', 1, null);
INSERT INTO Books VALUES (9780195038637, 'Battle Cry of Freedom', 'English', 490, 'February 25, 1988', 99, null);
INSERT INTO Books VALUES (9789178615155, 'Surhörningen', 'Swedish', 195, '2019', 4, null);
INSERT INTO Books VALUES (9789178614577, 'Jag älskar regnbågsenhörningar', 'Swedish', 190, '2021', 2, null);
评审表中的相关列:
ReviewId PK int
BookId FK bigint -- FK to ISBN13
CategoryID FK
WriterId FK
Date
样本数据审查:
insert into Reviews values(0020, '9783852913735', '120', 11, '2001-02-21');
insert into Reviews values(0021, '9789177836599', '140', 4, '2001-10-19');
insert into Reviews values(0022, '9789178130979', '110', 1, '2002-02-22');
insert into Reviews values(0023, '9789178130979', '90', 8, '2003-09-06');
insert into Reviews values(0024, '9789178614677', '50', 2, '2005-08-29');
insert into Reviews values(0025, '9789178615155', '10', 5, '2004-08-25');
insert into Reviews values(0026, '971019503872', '10', 9, '2009-06-11');
insert into Reviews values(0027, '9780195038637', '20', 2, '2010-11-10');
样本数据类别:
insert into Categories (CategoryId, Name) values(10, 'Architecture');
insert into Categories values(20, 'Art');
insert into Categories values(30, 'Astrology');
insert into Categories values(40, 'Baking');
insert into Categories values(50, 'Business Management');
insert into Categories values(60, 'Biology');
insert into Categories values(70, 'Comics');
insert into Categories values(80, 'Computational Science');
下面是我的评论部分代码,因为我想显示每本书的评论数量:
SELECT
BookId,
COUNT
(BookId) [Reviews]
FROM
Reviews
GROUP BY BookId
HAVING COUNT
(BookId)> 1
因此,预期结果将是:
Title | Author | BookId | Category | Number of Reviews
假设从您的示例查询中,您只经过了一次审阅,您将得到类似的结果(显然是猜测您需要加入的其他表)。有几种关联方法,但简单计数只需要内联关联子查询:
create view MyView as
select
b.Title,
a.Name Author,
b.ISBN13 BookId,
c.Name Category,
(select Count(*) from Reviews r where r.BookId=b.ISBN13) Reviews
from Books b
join Categories c on c.Id=b.CategoryId
join Authors a on a.Id=b.AuthorId
使用您添加的数据子集,此查询工作正常
Title BookId Reviews
------------------------------ --------------- -----------
Ulysses 9783852913735 1
Battle Cry of Freedom 9780195038637 1
Surhörningen 9789178615155 1
Jag älskar regnbågsenhörningar 9789178614577 0
请查看此查询。我创建了视图,因为类别没有与books表兼容的值,所以我使用左连接来检索在books和review中都有值的记录。请随时对答案进行评论,如果需要,请告诉我任何其他补充或修改。我很乐意帮助你。感谢您发布Insert脚本和表定义,它们为我提供了快速实现和测试功能
CREATE view My_View AS
(
SELECT
[B].[ISBN13] AS [BookId]
,[B].[Title]
,[B].[AuthorId] AS [Author]
,[C].[Name] As [Category]
, COUNT([R].[ReviewId]) OVER ( PARTITION BY [B].[Title]) AS [Number of reviews]
FROM Reviews [R]
INNER JOIN Books [B]
ON [R].[BookId] = [B].[ISBN13]
LEFT JOIN Categories [C]
ON [B].[CategoryId] = [C].[CategoryId]
)
SELECT * FROM My_View
请显示样本数据+预期结果。您很可能需要
转换
或转换
,以获得匹配的数据类型。您的加入应该是在Reviews.BookId=Books.isbn13为什么您的一些示例BigInt
值是整数(9783852913735
)而有些是字符串('9783852913735'
)?为什么有些列不需要数据类型,例如语言
?感谢您的关注,我一直在团队中工作。将更正此问题谢谢,已创建列,但没有值?@EST203谢谢您的编辑-您的评论的图书Id与图书的图书Id不匹配-您的数据模型中的外键是什么?大概你缺了一列。我建议你提供几本书和评论作为样本数据和预期结果,解释每本书是如何获得其评论数的。非常感谢,我希望现在它更清晰了…我用你的样本数据进行了测试,一切都如我预期的那样工作。被上面的定义和数据(例如Review)弄糊涂了。BookId
和CategoryId
是一个字符串,但是查询是正确的。@EST203仍然没有看到预期的结果吗?
CREATE view My_View AS
(
SELECT
[B].[ISBN13] AS [BookId]
,[B].[Title]
,[B].[AuthorId] AS [Author]
,[C].[Name] As [Category]
, COUNT([R].[ReviewId]) OVER ( PARTITION BY [B].[Title]) AS [Number of reviews]
FROM Reviews [R]
INNER JOIN Books [B]
ON [R].[BookId] = [B].[ISBN13]
LEFT JOIN Categories [C]
ON [B].[CategoryId] = [C].[CategoryId]
)
SELECT * FROM My_View