使用SQL Server CTE检索多个结果集

5
我想知道如何基于一个CTE检索多个结果集?就像下面的示例一样 - 但很明显这是不起作用的。
有谁知道我怎么可以基于一个CTE获取这2(或更多)数据集?(更多的意思是说,从这个同一个CTE中也获得总的记录数。)
;WITH CTE AS  
(
  SELECT 
      Column1, Column2, Column3 
  FROM 
      Product 
  WHERE 
      Name LIKE '%Hat%' AND Description Like '%MyBrand%'
)
SELECT DISTINCT CategoryId FROM CTE
SELECT DISTINCT BrandId FROM CTE

我看过一些例子,它们可以同时获得计数和一个结果集。但我找不到任何产生多个结果集的东西。 - Tys
2
如果你需要类似这样的东西,那么你应该使用表变量或临时表,而不是CTE。 - Lamak
一个对于此特定情况可行但不够美观的方法: ;WITH CTE AS (...) SELECT 'C' AS ItemType, CategoryID FROM CTE UNION SELECT 'B', BrandID FROM CTE。 从查询结果中选择 ItemType='C' 的行以获取类别,选择 ItemType='B' 的行以获取品牌。 - Ed Gibbs
可能是使用多个CTE的重复问题。 - paparazzo
1
不仅仅是因为它无法完成。而且不应该这样做。CTE只是语法评估。如果您要多次使用结果,则通常应将其保留到#temp或表变量。 - paparazzo
显示剩余2条评论
1个回答

8

CTE(公共表达式)仅存在于紧随其后的查询中,因此不可能将其用于两个单独的select语句。您需要将数据保留在临时表中,或者构造/调用CTE两次。


1
好的,那就完全清楚了。看到一些例子,似乎可以做到,但是我明白了,这是不可能的。 - Tys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接