У меня есть этот простой вопрос T-SQL, он испускает связку колонок от стола и также присоединяется к информации из других связанных таблиц.
Моя модель данных проста. У меня есть запланированное событие с участниками. Я должен знать, сколько участников участвует в каждом событии.
Мое решение этого состоит в том, чтобы добавить CTE, что группы наметили события и считают число участников.
Это позволит мне участвовать в той информации за запланированное событие. Хранение простого вопроса.
Мне нравится сохранять мои вопросы простыми, однако, Если я когда-нибудь в будущей потребности иметь дополнительные временные результаты, доступные во время моего простого вопроса, что я делаю?
Я действительно хотел бы его, если у меня могло бы быть несколько CTEs, но я не могу, правильно? Каковы мои варианты здесь?
Я исключил взгляды и выполнение вещей в слое данных приложения. Я предпочитаю изолированному свои вопросы SQL.
Вы можете иметь несколько CTE
в одном запросе, а также повторно использовать CTE
:
WITH cte1 AS
(
SELECT 1 AS id
),
cte2 AS
(
SELECT 2 AS id
)
SELECT *
FROM cte1
UNION ALL
SELECT *
FROM cte2
UNION ALL
SELECT *
FROM cte1
Обратите внимание, однако, что SQL Server
может переоценить CTE
каждый раз, когда оно обращается, поэтому, если вы используете значения, такие как RAND ()
, Newid ()
и т. Д. Они могут измениться между вызовами CTE
.
Вы, безусловно, можете иметь несколько CTE's в одном выражении запроса. Вам просто нужно отделить их с запятой. Вот пример. В приведенном ниже примере присутствуют два CTE. Одно названо
CountryAndnumberofProducts
, а второй называется ProductsOverteDendollars
.
WITH CategoryAndNumberOfProducts (CategoryID, CategoryName, NumberOfProducts) AS
(
SELECT
CategoryID,
CategoryName,
(SELECT COUNT(1) FROM Products p
WHERE p.CategoryID = c.CategoryID) as NumberOfProducts
FROM Categories c
),
ProductsOverTenDollars (ProductID, CategoryID, ProductName, UnitPrice) AS
(
SELECT
ProductID,
CategoryID,
ProductName,
UnitPrice
FROM Products p
WHERE UnitPrice > 10.0
)
SELECT c.CategoryName, c.NumberOfProducts,
p.ProductName, p.UnitPrice
FROM ProductsOverTenDollars p
INNER JOIN CategoryAndNumberOfProducts c ON
p.CategoryID = c.CategoryID
ORDER BY ProductName