Sql запрос - вернуть 2 таблицы - PullRequest
0 голосов
/ 17 марта 2011
 declare @PageIndex int  
declare @PageSize int  
declare @CategoryID int 
declare @FromReleaseDate datetime 
declare @TillRelaseDate datetime


set @CategoryID =6
set @FromReleaseDate = '1.01.2000'
set @TillRelaseDate = '1.01.2022'
set @PageIndex =1
set @PageSize=2

begin
with filtered as (
  select ArticleList.ID as ID, ArticleList.CategoryID as CategoryID

  from (
     select  a.*, c.ID as cID, c.ParentID as ParentID, 
         ROW_NUMBER() over(order by ReleaseOn desc) as RowNum 
        from Article as a
        inner join Category as c

        on a.CategoryID=c.ID and (@CategoryID is null or a.CategoryID = @CategoryID  )
         where (a.ReleaseOn>=@FromReleaseDate)
         and (a.ReleaseOn <=@TillRelaseDate )

    ) 
    as ArticleList 
        where ArticleList.RowNum  between 
        (@PageIndex - 1) * @PageSize + 1 and @PageIndex*@PageSize

)



 select c.* from Article as a
   inner join Category as c on a.CategoryID=c.ID
 where
   c.id in (select CategoryID from filtered) 


  select a.* 
  from Article as a
  inner join Category as c on a.CategoryID=c.ID
  where a.id in (select id from filtered)

 end

Я должен вернуть 2 таблицы. Но я не могу этого сделать, потому что отфильтровано во втором запросе недоступно. Есть ли способ исправить эту ошибку?

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Использование табличной переменной ...

declare @filtered as table (
      ID int
    , CategoryID int
)

insert into @filtered
  select ArticleList.ID as ID, ArticleList.CategoryID as CategoryID

  from (
     select  a.*, c.ID as cID, c.ParentID as ParentID, 
         ROW_NUMBER() over(order by ReleaseOn desc) as RowNum 
        from Article as a
        inner join Category as c

        on a.CategoryID=c.ID and (@CategoryID is null or a.CategoryID = @CategoryID  )
         where (a.ReleaseOn>=@FromReleaseDate)
         and (a.ReleaseOn <=@TillRelaseDate )

    ) 
    as ArticleList 
        where ArticleList.RowNum  between 
        (@PageIndex - 1) * @PageSize + 1 and @PageIndex*@PageSize

with filtered as (
    select * from @filtered
)
... Rest of the query

select * from @filtered
1 голос
/ 17 марта 2011

Используйте переменные таблицы или создайте представление (если у вас есть разрешения), которое представляет запрос, который у вас есть в вашем CTE в настоящее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...