如何合并两个或多个具有不同 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 mytable1
和 select a, b from mytable2
就足够了
很难理解你到底想要什么?能详细解释一下吗?
嗨波西米亚人。需要将上述查询合并为一个查询。我知道通过使用内部连接我们可以做到这一点,但我不想在子查询中重复相同的代码(期望条件都相同)。无论如何要编写查询中不应重复代码的查询?让我知道这是否有意义
@vamshi13: (i) 请UNION
上述查询的输出并验证,整个结果集确实将您带到某个地方吗?毕竟,查询 2 和 3 中的列别名不会出现在输出中的任何位置(如果您按照上面列出的顺序 UNION
ed 他们 - 无论如何都不会出现在行级别)。 (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
中做一些其他事情(例如 DISTINCT
和 AVG
)但不知道您的最终目标是什么,很难做到全面回答您的问题。
【讨论】:
以上是关于如何合并两个或多个具有不同 where 条件的查询?我必须重用在第一个代码中使用的代码的主要内容,如果未能解决你的问题,请参考以下文章
SQL/Impala:将多个查询(具有不同的 where 子句)合并为一个