我有这张桌子:
我从中创建此视图:
这个视图CardId
允许我JOIN
对着Card
表格使用,这样我就可以Count
从任何CardId
. 这是我的 SQL:
SELECT * FROM (
SELECT
si.CardId SourceCardId,
ti.CardId TargetCardId,
(SELECT TOP 1 r.Name
FROM dbo.Relationship r
WHERE r.Id = rac.RelationshipId) [Name],
Count(*) [Count]
FROM dbo.Relationship_AcquiredCard rac
JOIN dbo.AcquiredCard sac ON rac.SourceAcquiredCardId = sac.Id
JOIN dbo.AcquiredCard tac ON rac.TargetAcquiredCardId = tac.Id
JOIN dbo.CardInstance si ON sac.CardInstanceId = si.Id
JOIN dbo.CardInstance ti ON tac.CardInstanceId = ti.Id
GROUP BY si.CardId, ti.CardId, rac.RelationshipId
-- you can probably ignore everything above
) X
CROSS APPLY
(values (X.TargetCardId),
(X.SourceCardId)
) whatdoesthisdo(CardId) --wut
做什么whatdoesthisdo
?我CROSS APPLY
从这个答案中得到了答案。如果我尝试以通常的方式别名,我会收到此错误:
谢谢!
从下面应该清楚
WhatDoesThisDo
VALUES
为子句定义的派生表提供表别名。然后它需要所有列名的逗号分隔列表(因为无法在其VALUES
自身内部命名它们)。在这种情况下,它只返回一列,因此完整的列列表是
(CardId)
语法的相关部分是
尽管上面方括号指示的可选性不适用于表值构造函数。