Sql 我不明白你为什么需要一个函数。您在这里陈述的所有数据都可以存储在表中,然后通过简单的联接获取。 即使BOM是递归的,也可以使用CTE
如果坚持使用该函数,可以使用Sql 我不明白你为什么需要一个函数。您在这里陈述的所有数据都可以存储在表中,然后通过简单的联接获取。 即使BOM是递归的,也可以使用CTE,sql,function,stored-procedures,iteration,Sql,Function,Stored Procedures,Iteration,如果坚持使用该函数,可以使用交叉应用对每一行调用该函数 到目前为止,我创建的唯一功能是创建 两列表格,填写同一销售中销售的所有部件 按特定桌面型号订购。你是在推荐我发帖吗 将该表的结果添加到另一个表中,并继续插入新的 函数的每个实例的行 我明白了,你不需要使用函数。 有很多不同的可能性 您可能非常熟悉的一个方法是将函数转换为SP并使用 INSERT INTO [TableName] EXEC [SP_NAME] 另一种方法是将查询转换为累加子查询或CTE(见下文) 和其他人一起参加 通常避免
交叉应用
对每一行调用该函数
到目前为止,我创建的唯一功能是创建 两列表格,填写同一销售中销售的所有部件 按特定桌面型号订购。你是在推荐我发帖吗 将该表的结果添加到另一个表中,并继续插入新的 函数的每个实例的行 我明白了,你不需要使用函数。 有很多不同的可能性 您可能非常熟悉的一个方法是将函数转换为SP并使用
INSERT INTO [TableName]
EXEC [SP_NAME]
另一种方法是将查询转换为累加子查询或CTE(见下文)
和其他人一起参加
通常避免每次都创建函数,因为它们会对数据库造成很大的破坏。
BOM表不是递归的。我对CTE不熟悉
当您有许多连接的子查询时,公共表表达式(CTE)是很好的工具,一旦您习惯了它们,它们将为复杂查询带来很多清晰度(IMO)。
CTE还提供对递归的本机支持。
网上有很多文章可以指导你。只需谷歌CTE expamples或CTE教程
我没有交叉申请的经验
交叉应用:从第页开始
APPLY运算符允许您为查询的外部表表达式返回的每一行调用表值函数
最后也是最重要的一点
任何例子都将不胜感激
如果您能给我您已经有的部分脚本,我将尝试将其转换为我想要指导您的查询。谢谢您的建议。但是,如何使用您的格式为数据输入创建ASP.net GridView?我希望能够根据计算机类型、Jul_Num、Aug_Num和Sep_Num惯例显示和编辑“桌面”的所有数字。目前,我正在为每个列添加一个新的ItemTemplate,该列明确标记为Jul_Num等。感谢您的建议。但是,如何使用您的格式为数据输入创建ASP.net GridView?我希望能够根据计算机类型、Jul_Num、Aug_Num和Sep_Num惯例显示和编辑“桌面”的所有数字。目前,我正在为每个列添加一个新的ItemTemplate,该列明确标记为Jul_Num等。到目前为止,我创建的唯一功能是创建一个两列表,其中填充了与特定桌面型号相同的销售订单上销售的所有组件。您是否建议我将该表的结果发布到另一个表中,并继续为函数的每个实例插入新行?BOM表不是递归的。我对CTE不熟悉。我没有交叉申请的经验。任何例子都将不胜感激。@user2547072,你问的问题太多了,只是为了一个评论,请查看我的扩展编辑答案。路易斯,谢谢你给我指出CTE的!!!只要我能找到,我就会欣赏可读性更强的代码。你改变了我的编程风格@用户2547072如果您将我的回复标记为已接受,我将不胜感激?我现在开始参与Stackoverflow,我看到获得的分数对我如何参与产生了影响。到目前为止,我创建的唯一功能是创建一个两列表,其中包含在同一销售订单上作为特定桌面型号销售的所有组件。您是否建议我将该表的结果发布到另一个表中,并继续为函数的每个实例插入新行?BOM表不是递归的。我对CTE不熟悉。我没有交叉申请的经验。任何例子都将不胜感激。@user2547072,你问的问题太多了,只是为了一个评论,请查看我的扩展编辑答案。路易斯,谢谢你给我指出CTE的!!!只要我能找到,我就会欣赏可读性更强的代码。你改变了我的编程风格@用户2547072如果您将我的回复标记为已接受,我将不胜感激?我现在开始参加Stackoverflow,我看到获得的分数对我如何参与有影响
Desktop 100 200 150
Laptop 300 400 700
CPU 1 (This means we sell 1 CPU with every desktop)
Hard Drive 2 (We sell 2 with every desktop)
Printer .8 (80% of the time we sell a printer)
CPU 400 600 850
Hard Drive 500 800 1000
ABC CPU 3 3 1
ABC Hard Drive 6 3 2
DEF CPU 2 2 1
DEF Hard Drive 2 2 1
MNO CPU 1 1 1
MNO Hard Drive 1 1 1
XYZ CPU 1 1 1
XYZ Hard Drive 2 1 2
SELECT All_Components.Model_Num, All_Components.Part_Num, SUM(All_Components.Qty) AS Total, TTO.Target_Total, SUM(All_Components.Qty)
/ TTO.Target_Total AS Comp_Percent
FROM (SELECT Test_tbl_Computers.Model_Num, Test_tbl_Orders_2.Order_Num, Test_tbl_Orders_2.Part_Num, Test_tbl_Orders_2.Qty
FROM Test_tbl_Orders AS Test_tbl_Orders_2 CROSS JOIN
Test_tbl_Computers) AS All_Components INNER JOIN
(SELECT Test_tbl_Orders.Part_Num, SUM(Test_tbl_Orders.Qty) AS Target_Total
FROM Test_tbl_Orders INNER JOIN
Test_tbl_Computers AS Test_tbl_Computers_1 ON Test_tbl_Orders.Part_Num = Test_tbl_Computers_1.Model_Num
GROUP BY Test_tbl_Orders.Part_Num) AS TTO ON All_Components.Model_Num = TTO.Part_Num
WHERE (All_Components.Order_Num IN
(SELECT Order_Num
FROM Test_tbl_Orders AS Test_tbl_Orders_1
WHERE (Part_Num = All_Components.Model_Num))) AND (All_Components.Part_Num <> All_Components.Model_Num)
INSERT INTO [TableName]
EXEC [SP_NAME]