【问题标题】:RowNumber not working in Count CaseRowNumber 在计数案例中不起作用
【发布时间】:2013-09-11 16:30:01
【问题描述】:

我有这个来计算状态为'OnShelf'的书的数量

select 

   BookTitleID, 
   BookTitle,
   CallNumber,
   FullName,
   count(case Status when 'OnShelf' then 1 else null end) AS CopiesOnShelves, 
from
(  
select 
       Book.BookTitleID,
       BookTitles.BookTitle,
       BookTitles.CallNumber,
       Book.Status,
       FullName = LastName + ', ' + FirstName + ' ' + MiddleName,
From
    Book
        left outer join 
    BookTitles
        on BookTitles.BookTitleID = Book.BookTitleID 
        left outer join
    Authors
        on Authors.AuthorID = BookTitles.AuthorID   
) sub

Group By Callnumber, BookTitle, BookTitleID, FullName

样本输出

BookTitleID    BookTitle      CallNumber    Fullname   CopiesOnShelves
1              sample         test          test       3

但是当我在选择语句中包含行号时,它给了我错误的输出

select 

   BookTitleID, 
   BookTitle,
   CallNumber,
   FullName,
   count(case Status when 'OnShelf' then 1 else null end) AS CopiesOnShelves, 
    r
from
(  
select 
       Book.BookTitleID,
       BookTitles.BookTitle,
       BookTitles.CallNumber,
       Book.Status,
       FullName = LastName + ', ' + FirstName + ' ' + MiddleName,
       r = row_number() over (order by Book.BookTitleID) 
From
    Book
        left outer join 
    BookTitles
        on BookTitles.BookTitleID = Book.BookTitleID 
        left outer join
    Authors
        on Authors.AuthorID = BookTitles.AuthorID   

) sub

Group By Callnumber, BookTitle, BookTitleID, FullName, r

样本输出

BookTitleID    BookTitle      CallNumber    Fullname   CopiesOnShelves  R
1              sample         test          test       1                1
1              sample         test          test       1                2
1              sample         test          test       1                3

【问题讨论】:

    标签: tsql count sql-server-2008-r2 case row-number


    【解决方案1】:
    select 
       row_number() over (order by BookTitle) AS Row,
       BookTitleID, 
       BookTitle,
       CallNumber,
       FullName,
       count(case Status when 'OnShelf' then 1 else null end) AS CopiesOnShelves
    
    from
    (  
    select 
           Book.BookTitleID,
           BookTitles.BookTitle,
           BookTitles.CallNumber,
           Book.Status,
           FullName = LastName + ', ' + FirstName + ' ' + MiddleName
    
    From
        Book
            left outer join 
        BookTitles
            on BookTitles.BookTitleID = Book.BookTitleID 
            left outer join
        Authors
            on Authors.AuthorID = BookTitles.AuthorID   ) sub
    Group By Callnumber, BookTitle, BookTitleID, FullName
    

    得到了正确的输出,但我遇到了新问题Row-Number in Between Sub Query

    【讨论】:

    • 请将此标记为已接受的答案,以便其他人都知道它是完整的 - 例如所以像我这样的人不会浪费宝贵的时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2017-03-21
    • 2012-07-09
    • 2011-05-17
    • 1970-01-01
    • 2012-02-20
    相关资源
    最近更新 更多