Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 重复使用同一查询时的最佳实践_Sql_Oracle - Fatal编程技术网

Sql 重复使用同一查询时的最佳实践

Sql 重复使用同一查询时的最佳实践,sql,oracle,Sql,Oracle,重复多次使用同一查询的替代方法是什么。我希望将查询存储在某个地方,并在需要时调用它。 我计算了4个公式:MTD销售额、MTD上一年销售额、MAT销售额、MAT上一年销售额,作为5种不同产品的单独列:A、B、C、D、E。此外,还应提供一些静态条件,如账户详细信息和直销 我正在查询案例语句4中的公式*5中的产品时间,以便为所有5种产品定义带有静态条件的公式。i、 e.几乎80%的查询重复了4*5=20次。有没有更好的方法来代替对所有20次重复80%的查询。请注意,我不必将查询的值存储为函数,而是可以

重复多次使用同一查询的替代方法是什么。我希望将查询存储在某个地方,并在需要时调用它。 我计算了4个公式:MTD销售额、MTD上一年销售额、MAT销售额、MAT上一年销售额,作为5种不同产品的单独列:A、B、C、D、E。此外,还应提供一些静态条件,如账户详细信息和直销

我正在查询案例语句4中的公式*5中的产品时间,以便为所有5种产品定义带有静态条件的公式。i、 e.几乎80%的查询重复了4*5=20次。有没有更好的方法来代替对所有20次重复80%的查询。请注意,我不必将查询的值存储为函数,而是可以存储查询的重复部分并在需要时调用它吗

代码:

选择A1.*, -产品A、B、C、D的MTD 当 帐户“未提供”并键入“直接”和PRODUCT='A' 和 从日期提取月份=从表中选择最大显示日期提取月份 和 从日期提取年\u月=从表中选择最大显示日期提取年 然后销售其他0结束为MTD_产品_A, 当 帐户“未提供”并键入“直接”和PRODUCT='B' 和 从日期提取月份=从表中选择最大显示日期提取月份 和 从日期提取年\u月=从表中选择最大显示日期提取年 然后销售其他0结束为MTD_产品_B, 当 帐户“未提供”并键入“直接”和PRODUCT='C' 和 从日期提取月份=从表中选择最大显示日期提取月份 和 从日期提取年\u月=从表中选择最大显示日期提取年 然后销售其他0结束为MTD_PRODUCT_C, 当 帐户“未提供”,类型为“直接”和PRODUCT='D' 和 从日期提取月份=从表中选择最大显示日期提取月份 和 从日期提取年\u月=从表中选择最大显示日期提取年 然后销售其他0结束为MTD_产品_D, --产品A、B、C、D去年的MTD 当 帐户“未提供”并键入“直接”和PRODUCT='A' 和 从日期提取月份=从表中选择最大显示日期提取月份 和 从日期提取年份\u月=从表\u A中选择从最大显示日期提取年份\u日期-1 然后销售其他0结束为MTD_PY_PRODUCT_A, 当 帐户“未提供”并键入“直接”和PRODUCT='B' 和 从日期提取月份=从表中选择最大显示日期提取月份 和 从日期提取年份\u月=从表\u A中选择从最大显示日期提取年份\u日期-1 然后销售其他0结束为MTD_PY_PRODUCT_B, 当 帐户“未提供”并键入“直接”和PRODUCT='C' 和 从日期提取月份=从表中选择最大显示日期提取月份 和 从日期提取年份\u月=从表\u A中选择从最大显示日期提取年份\u日期-1 然后,其他0的销售额以MTD_PY_PRODUCT_C结束, 当 帐户“未提供”,类型为“直接”和PRODUCT='D' 和 从日期提取月份=从表中选择最大显示日期提取月份 和 从日期提取年份\u月=从表\u A中选择从最大显示日期提取年份\u日期-1 然后销售其他0结束为MTD_PY_PRODUCT_D, --产品A、B、C、D的垫销售 当 帐户“未提供”并键入“直接”和PRODUCT='A' 和 添加月份之间的日期月份从表A中选择最大日期月份作为最大日期距离,'Month',-11 和 truncSELECT MAXDate\u Month作为表A“Month”中的最大日期距离 然后销售其他0结束为材料产品A, 当 帐户“未提供”并键入“直接”和PRODUCT='B' 和 添加月份之间的日期月份从表A中选择最大日期月份作为最大日期距离,'Month',-11 和 truncSELECT MAXDate\u Month作为表A“Month”中的最大日期距离 然后销售其他0结束为材料产品, 当 帐户“未提供”并键入“直接”和PRODUCT='C' 和 添加月份之间的日期月份从表A中选择最大日期月份作为最大日期距离,'Month',-11 和 truncSELECT MAXDate\u Month作为表A“Month”中的最大日期距离 然后销售其他0结束为材料产品C, 当 帐户“未提供”,类型为“直接”和PRODUCT='D' 和 添加月份之间的日期月份从表A中选择最大日期月份作为最大日期距离,'Month',-11 和 truncSELECT MAXDate\u Month作为表A“Month”中的最大日期距离 然后,其他0的销售额将作为材料产品结束, --MAT去年销售的产品为A、B、C、D 当 帐户“未提供”并键入“直接”和PRODUCT='A' 和 添加月份之间的日期月份从表A中选择MAXDate\u Month作为MAX\u Date\u DIST,'Month',-23 和 添加月份从表A、'Month'、-12中选择MAXDate\u Month作为MAXDate\u DIST 然后销售其他0结束为材料产品A, 当 帐户“未提供”并键入“直接”和PRODUCT='B' 和 添加月份之间的日期月份从表A中选择MAXDate\u Month作为MAX\u Date\u DIST,'Month',-23 和 添加月份从表A、'Month'、-12中选择MAXDate\u Month作为MAXDate\u DIST 然后销售其他0结束为材料产品, 当 帐户“未提供”
在尝试一般性地执行此操作,然后以透视方式将所有数据放在单独的列中。@Durgaprasad这可能只是一个术语问题,但您不需要重复对B、C和D的查询。您确实需要重复case语句,尽管这会导致长时间的查询,但效率不会很低。@MTO得到了它,而不是复制粘贴,是否有可能将其存储在字符串变量中并调用它?所以这个查询看起来不是很庞大?@MTO,您修改后的查询建议有帮助,另一个澄清是:作为直接子查询进行查询是最佳的,还是有任何方法可以使用With子句进行查询?