【发布时间】:2013-09-03 21:37:18
【问题描述】:
Work Table
ProductId, LabelName, CategoryId, ChildCategoryId
------------------------------------
1, Widget A, 1, null
null, Category A, 2, 1
2, Widget B, 3, null
Categories Table
CategoryId, CategoryName
---------------------------
1, Category A
2, Category B
3, Category C
鉴于以上信息,您将如何获取产品 ID 的所有类别?
例如,给定产品 id 为 1,以下将是所需的结果。
Desired Results
ProductId, LabelName, CategoryId, ChildCategoryId
------------------------------------
1, Widget A, 1, null
null, Category A, 2, 1
null, Category B, null, 2
它应该是分层数据,我很抱歉无法很好地解释。这简直让我难以置信。小部件 A 的产品 id 为 1,类别 id 为 1。这意味着包含 ChildCategoryId 为 1 的所有记录,这为我们提供了类别 A。CatA 的类别 id 为 2,因此与之前一样,所有具有结果中包含 2 的 ChildCategoryId,这就是包含类别 B 的原因。
【问题讨论】:
-
您能解释一下您是如何从您提供的样本数据中得出所需结果的吗?
associationTable又从何而来? -
为了更清楚一点,我将关联表重命名为事务表。可能没有工作。它不是主表或连接表。我猜这就像一个结果表。
-
Category B 通过Category A 与Widget A 相关。Transaction 表中的第二条记录显示Category A 的category id 为2。
-
我还是没听懂。您的评论说“类别 A 的类别 ID 为 2”。
Categories说“A 类”的CategoryId为 1。TransactionTable恰好有一行与LabelName“A 类”(以前为“类别 1”。)和CategoryId为 2,但它是显然,与“Widget A”行没有任何关系。您不会假设表中行的顺序很重要,是吗?如果是这样,您需要提供明确的顺序。您可以编辑您的问题以包含一个简单的分步程序吗?这将使编写 CTE 变得更加容易。 -
行的顺序不重要。这是我所说的令人困惑的部分。在第二条记录 TransactionTable 中,它表示类别 A,但是,类别 id 是指与其链接的子记录。让我尝试以某种方式改写 OP
标签: sql sql-server-2008 tsql