Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查看表SQL Server_Sql_Sql Server_Tsql - Fatal编程技术网

查看表SQL Server

查看表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

我想创建一个视图,显示图书标题和对特定图书的评论数量

当值不兼容时,有哪些选项

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, 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