我有三个相关的五个表父子和另一个表,它存储有关子表中项目的信息。
以下是我的表格:
父表
Parent Item ID PARENT Description width Parent item Thickness
500200 500200 Description 15 20
500201 500201 Description1 5 2
500202 500202 Description2 1.5 16
500203 500203 Description3 15 20
子表
Parent Item ID Item ID Quantity
500200 100200 1
500200 400200 1
500200 300200 1
300200 100200 1
子项详细信息表如下所示
表存储Item = 100200在表X中,Item = 400200在表Y中,Item = 300200
表X
Item ID DECRIPTION THICKNESS DIAMETER WIDTH
100200 100200DESC 0.15 1.5 5
表Y
Item ID DECRIPTION NAME SIZE
400200 400200DESC XYZ 4X6
表z
Item ID DECRIPTION NAME SIZE offset
300200 300200DESC XYZ 3X9 0.375
我们要做的是使用C#创建一个物料清单结构或父到子递归结构。
我想创建一个SQL Server视图或存储过程,如下所示。
我希望看到类似这样的内容:父表中的所有列,子表以及基于父子关系的表X,Y,Z中的一些列。
parent ID PARENT Description Parent Thickness Item ID Quantity child DECRIPTION THICKNESS offset SIZE
500200 500200 Description 20 100200 1 100200DESC 0.15
500200 500200 Description 20 400200 1 400200DESC 4X6
500200 500200 Description 20 300200 1 300200DESC 0.375
300200 300200 Description 20 100200 1 100200DESC 0.15 3X9
答案 0 :(得分:1)
如果您要为每个项目查找多个行,则每行具有不同的值。你可以尝试:
SELECT
childTable.ParentItemID,
parentTable.ParentDescription,
childTable.ItemID,
childTable.Quantity,
fields.Description,
fields.Name,
fields.Value
FROM childTable
LEFT JOIN parentTable ON childTable.ParentItemID = parentTable.ParentItemID
LEFT JOIN (
SELECT ItemID, Description, "THICKNESS" AS Name, THICKNESS AS Value FROM TableX
UNION ALL
SELECT ItemID, Description, "SIZE", SIZE FROM TableY
UNION ALL
SELECT ItemID, Description, "offset", offset FROM TableZ
UNION ALL
SELECT ItemID, Description, "DIAMETER", DIAMETER FROM TableX
UNION ALL
SELECT ItemID, Description, "WIDTH", WIDTH FROM TableX
) AS fields ON fields.ItemID = childTable.ItemID
ORDER BY childTable.ParentItemID, childTable.ItemID, fields.Name
通过调整联合选择,可以使用更多列和更少行来更改此值。
当然,当我处理与基本表绑定的“动态”额外值时,我通常只创建一个详细信息表,如下所示:
DetailTable:
ItemID
DetailTypeID
DetailValue
当然,如果你确实想要将一堆细节作为一行中的列,那么这种方式可能需要一些努力。