如何合并两个或多个具有不同 where 条件的查询?我必须重用在第一个代码中使用的代码

Posted

技术标签:

【中文标题】如何合并两个或多个具有不同 where 条件的查询?我必须重用在第一个代码中使用的代码【英文标题】:How to merge two or more queries with different where conditions? I have to reuse the code which is being used in 1st where code 【发布时间】:2015-06-19 08:11:49 【问题描述】:

---下面的查询给出了来自事实的所有客户,无论条件如何

SELECT     count( dbo.Fact_Promotion.customerid) as Mailquantity
FROM         dbo.Fact_Promotion   
INNER JOIN dbo.Dim_Promotion  
    ON dbo.Fact_Promotion.PromotionID = dbo.Dim_Promotion.PromotionID 

---下面的查询为客户提供了where条件

SELECT     count(distinct fact_loan.customerid) as [New loans] ,avg(Fact_Loan.Financeamount) as [Avg New Loan Amount]
FROM         dbo.Fact_Promotion 
 where <condition> 
      AND  dbo.Fact_Loan.LoanTypeID = 6 
      AND dbo.Fact_Loan.AccountStatusID = 1

----下面的查询为客户提供了不同的where条件

SELECT     count(distinct fact_loan.customerid) as [Total loans],avg(Fact_Loan.Financeamount) as [Avg Total Loan Amount]
FROM         dbo.Fact_Promotion 
 where <condition>
    AND dbo.Fact_Loan.AccountStatusID = 1

【问题讨论】:

查询的列数不同。您究竟希望它们如何“组合”?另外,我绝对确定所有这些连接都不是证明您的问题所必需的。请编辑掉所有不相关的 SQL,例如将每个查询更改为 select x, y from mytable1select a, b from mytable2 就足够了 很难理解你到底想要什么?能详细解释一下吗? 嗨波西米亚人。需要将上述查询合并为一个查询。我知道通过使用内部连接我们可以做到这一点,但我不想在子查询中重复相同的代码(期望条件都相同)。无论如何要编写查询中不应重复代码的查询?让我知道这是否有意义 @vamshi13: (i) 请UNION 上述查询的输出并验证,整个结果集确实将您带到某个地方吗?毕竟,查询 2 和 3 中的列别名不会出现在输出中的任何位置(如果您按照上面列出的顺序 UNIONed 他们 - 无论如何都不会出现在行级别)。 (ii) WITH 子句可能有助于防止代码重复。 (iii) dbo.Fact_Loan.AccountStatusID = 1 在第二个和第三个查询中是错字吗? (iv) 顺便说一句:请问您问题的数据仓库、SSIS 和 MSBI 方面是什么? 【参考方案1】:

我不确定你的问题是什么。

第二个查询中的WHERE 子句似乎传递了第三个查询中WHERE 子句的数据子集。两个WHERE 语句看起来都相同,除了第二个查询(新贷款)包含一个额外的条件,即 LoanTypeId(可能是他们采取的金融产品)为 6。我猜这是最新的贷款产品或活动。

在不知道您要做什么的情况下很难给您答案,但如果您想按 LoanTypeId 显示客户总数,您可以通过将 LoanTypeId 列添加到 SELECT 语句并添加GROUP BY dbo.Fact_Loan.LoanTypeId 到语句的末尾。

这可能不是直截了当的,因为您在 SELECT 中做一些其他事情(例如 DISTINCTAVG)但不知道您的最终目标是什么,很难做到全面回答您的问题。

【讨论】:

以上是关于如何合并两个或多个具有不同 where 条件的查询?我必须重用在第一个代码中使用的代码的主要内容,如果未能解决你的问题,请参考以下文章

SQL/Impala:将多个查询(具有不同的 where 子句)合并为一个

使用具有嵌套或条件的多个 where(或 AND)?

SQL合并两个具有不同列号的选择查询,同时删除重复项?

把多个where条件不同的sql语句合并为一个?

oracle SQL查询中,如何在where中用条件语句,判断不同情况,追加不同的And条件?

mysql: 两个字段合并,字符时间转时间戳,别名字段作为where条件查询