SQL Server には、次のように定義された階層カテゴリがいくつかあります。
CREATE TABLE [dbo].[CategoryDesc] (
[CategoryId] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](255) NOT NULL
)
CREATE TABLE [dbo].[CategoryRelationship] (
[RelationshipId] [int] IDENTITY(1,1) NOT NULL,
[CategoryId] [int] NOT NULL,
[ParentId] [int] NULL
)
CREATE TABLE [dbo].[Machine] (
[MachineId] [int] IDENTITY(1,1) NOT NULL,
[Make] [varchar](50) NOT NULL,
[Model] [varchar](255) NOT NULL,
[CreateDate] [datetime] NOT NULL,
[CategoryId] [int] NOT NULL
)
注: 簡潔にするために、主キー、関係、および一部のフィールドは省略されています。
私はすでにCTEを使用して、完全なツリーを生成できるようにしています。その抜粋は次のとおりです。
Foundry/Forging
Foundry/Forging > Core Equipment
Foundry/Forging > Furnaces
Foundry/Forging > Furnaces > Induction
Glass
Glass > Bevelling
Glass > Cutting
Glass > Cutting > Laminated Glass
Glass > Cutting > Manual
Glass > Cutting > Shape
Glass > Cutting > Straight
Glass > Decorating
Glass > Drilling
Glass > Drilling > Horizontal
Glass > Drilling > Vertical
etc
最上位の categoryId を指定して、追加された子カテゴリと追加されたレベルに関係なく、(CreateDate に基づいて) 追加された最新のマシンを返すクエリが必要です。
私が抱えている問題は、マシンが 2 番目または 3 番目のレベルのカテゴリに追加される可能性があり (最上位レベルにはなりません)、CTE が再帰部分での左結合を許可しないことです。
助けてくれてありがとう。:)