Si queremos o necesitamos, podemos tener varias tablas virtuales (CTE) en una sola vista o en un solo stored procedure. Para ello debemos declararlas de esta forma:

WITH MiCTE1 AS (
   SELECT ...
),

MiCTE2 AS (
   SELECT ...
)

SELECT
   Columnas
FROM
   MiTablaPrincipal
LEFT JOIN
   MiCTE1
      ON MiCondición1
LEFT JOIN
   MiCTE2
      ON MiCondición2

Como habrás notado, la palabra clave WITH se escribe solamente una vez (antes de la primera CTE) y el carácter de separación entre una CTE y la siguiente es la coma.

Puedes así tener todas las tablas virtuales que quieras, los únicos requisitos son que debes hacer un JOIN a cada una de ellas en tu SELECT principal y que no puedes tener una CTE dentro de otra CTE.

Artículos relacionados:

Usando CTE (Common Table Expression)

Otro ejemplo de CTE: ventas semanales

Usando una cross-table

¿Por qué usar una cross-table?

El índice del blog Firebird21