sql-server - 针对一个 CTE 进行多项选择

标签 sql-server tsql

我有一个 CTE 查询来过滤表 Student

  Student

   (
    StudentId PK,
    FirstName ,
    LastName,
    GenderId,
    ExperienceId,
    NationalityId,
    CityId
  )

基于大量过滤器(多个城市、性别、多种经历(1、2、3)、多个国籍),我通过使用动态 sql 并将学生表与用户定义的表连接起来创建 CTE(城市表,国籍表,...)

之后我必须通过每个过滤器检索学生的数量

CityId City Count

NationalityId Nationality Count

其他过滤器也是如此。

我可以做类似的事情吗

  ;With CTE(
         Select
         FROM Student
         Inner JOIN ...
         INNER JOIN ....)
  SELECT CityId,City,Count(studentId)
  FROm CTE
  GROUP BY CityId,City

  SELECT GenderId,Gender,Count
  FROM CTE
  GROUP BY  GenderId,Gender

我想要像 LinkedIn 在搜索方面所做的那样(人员搜索、职位搜索)

http://www.linkedin.com/search/fpsearch?type=people&keywords=sales+manager&pplSearchOrigin=GLHD&pageKey=member-home

速度如此之快,而且做同样的事情。

最佳答案

您不能使用多项选择,但可以使用多个这样的 CTE。

WITH CTEA
AS
(
SELECT 'Coulmn1' A,'Coulmn2' B
),
CETB
AS
(
SELECT 'CoulmnX' X,'CoulmnY' Y
)

SELECT * FROM CTEA, CETB

为了获取计数,请使用 RowNumber 和 CTE,有些人是这样想的。

ROW_NUMBER() OVER ( ORDER BY COLUMN NAME )AS RowNumber,
Count(1) OVER() AS TotalRecordsFound

如果您需要更多相关信息,请告诉我。

示例供您引用。

With CTE AS (
         Select StudentId, S.CityId, S.GenderId
         FROM Student S
         Inner JOIN CITY C
         ON S.CityId = C.CityId
         INNER JOIN GENDER G
         ON S.GenderId = G.GenderId)
,
GENDER
AS
(
  SELECT GenderId
  FROM CTE
  GROUP BY  GenderId
  )


SELECT * FROM GENDER, CTE

关于sql-server - 针对一个 CTE 进行多项选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9682488/

相关文章:

sql - 使用 BCP 查询输出获取列名

sql - 如何在 SQL Server SP 中一次重命名所有变量

c# - 如何将实体从 ASP.NET MVC 站点序列化为 XML?

sql-server-2005 - SQL 2005-链接服务器到Oracle查询的速度极慢

tsql - 在一条 SQL 语句中插入和更新记录?

sql - 单个分隔列上的 T-SQL `FOR JSON`

sql - 如何在输入参数中的第二个哈希后获取值

sql-server - SQL Server 2005/08 中的对等复制

sql - 当有 6 个月的间隙时,抓取所有内容,如果没有 6 个月的间隙,则抓取所有 sql

sql - 创建一个基于将范围转换为行的 sql View