简体   繁体   English

在select语句中的LEFT JOIN之前使用WHERE子句

[英]use WHERE clause before LEFT JOIN in a select statement

I have the code below and was hoping to get some help on how I'd use the 'where' clause before the left join - I have a table with lots of data but need to filter it by the salary options before I return the results I want for the select statement. 我有下面的代码,并希望获得一些有关如何在左联接之前使用“ where”子句的帮助-我有一个包含大量数据的表,但在返回结果之前需要按薪水选项进行过滤我想要选择语句。 Please see the code below, Thanks in advance. 请查看下面的代码,谢谢。

Also, it is taking a very very long time to execute. 而且,这需要非常长的时间才能执行。 6+ mins, for a table with only 70 or 80 records. 6分钟以上,仅包含70或80条记录的表。 Could it be something wrong with the way I've written the query? 我编写查询的方式可能有问题吗? Thanks 谢谢

select 

a.TicketNo,
a1.Details_PCredit as Salary_Amount_1,
a1.Details_PTransactionDate as Salary_Date_1,
a2.Details_PCredit as Salary_Amount_2,
a2.Details_PTransactionDate as Salary_Date_2,
a3.Details_PCredit as Salary_Amount_3,
a3.Details_PTransactionDate as Salary_Date_3,
a4.Details_PCredit as Salary_Amount_4,
a4.Details_PTransactionDate as Salary_Date_4,
a5.Details_PCredit as Salary_Amount_5,
a5.Details_PTransactionDate as Salary_Date_5,
a6.Details_PCredit as Salary_Amount_6,
a6.Details_PTransactionDate as Salary_Date_6

from staging.MBS_Transactions as a


left join (
select TicketNo, Details_PNarration,
       max(Details_PTransactionDate) as maxDate        
       from staging.MBS_Transactions group by TicketNo
) as a0 on a0.TicketNo=a.TicketNo 
left join staging.MBS_Transactions as a1 on a1.TicketNo=a.TicketNo and a1.Details_PTransactionDate=a0.maxDate 
left join staging.MBS_Transactions as a2 on a2.TicketNo=a1.TicketNo and a2.Details_PTransactionDate<a1.Details_PTransactionDate
left join staging.MBS_Transactions as a3 on a3.TicketNo=a2.TicketNo and a3.Details_PTransactionDate<a2.Details_PTransactionDate
left join staging.MBS_Transactions as a4 on a4.TicketNo=a3.TicketNo and a4.Details_PTransactionDate<a3.Details_PTransactionDate
left join staging.MBS_Transactions as a5 on a5.TicketNo=a4.TicketNo and a5.Details_PTransactionDate<a4.Details_PTransactionDate
left join staging.MBS_Transactions as a6 on a6.TicketNo=a5.TicketNo and a6.Details_PTransactionDate<a5.Details_PTransactionDate
    where  
        (a.Details_PNarration like '%SALARY%' 
        OR a.Details_PNarration like '%Mid MTH%'
        OR a.Details_PNarration like '%Mid Month%'
        OR a.Details_PNarration like '%Mid Month%'
        OR a.Details_PNarration like '%Staff%'
        OR a.Details_PNarration like '%SAL%'
        AND DAY(a.Details_PTransactionDate) between '23' and '25' 
        and WEEKDAY(a.Details_PTransactionDate) Between 0 and 4)

group by a.TicketNo;

You can use nested query with where 您可以在其中使用嵌套查询

select 

a.TicketNo,
a1.Details_PCredit as Salary_Amount_1,
a1.Details_PTransactionDate as Salary_Date_1,
a2.Details_PCredit as Salary_Amount_2,
a2.Details_PTransactionDate as Salary_Date_2,
a3.Details_PCredit as Salary_Amount_3,
a3.Details_PTransactionDate as Salary_Date_3,
a4.Details_PCredit as Salary_Amount_4,
a4.Details_PTransactionDate as Salary_Date_4,
a5.Details_PCredit as Salary_Amount_5,
a5.Details_PTransactionDate as Salary_Date_5,
a6.Details_PCredit as Salary_Amount_6,
a6.Details_PTransactionDate as Salary_Date_6

from (SELECT * FROM staging.MBS_Transactions a where  
        (a.Details_PNarration like '%SALARY%' 
        OR a.Details_PNarration like '%Mid MTH%'
        OR a.Details_PNarration like '%Mid Month%'
        OR a.Details_PNarration like '%Mid Month%'
        OR a.Details_PNarration like '%Staff%'
        OR a.Details_PNarration like '%SAL%'
        AND DAY(a.Details_PTransactionDate) between '23' and '25' 
        and WEEKDAY(a.Details_PTransactionDate) Between 0 and 4)) as a


left join (
select TicketNo, Details_PNarration,
       max(Details_PTransactionDate) as maxDate        
       from staging.MBS_Transactions group by TicketNo
) as a0 on a0.TicketNo=a.TicketNo 
left join staging.MBS_Transactions as a1 on a1.TicketNo=a.TicketNo and a1.Details_PTransactionDate=a0.maxDate 
left join staging.MBS_Transactions as a2 on a2.TicketNo=a1.TicketNo and a2.Details_PTransactionDate<a1.Details_PTransactionDate
left join staging.MBS_Transactions as a3 on a3.TicketNo=a2.TicketNo and a3.Details_PTransactionDate<a2.Details_PTransactionDate
left join staging.MBS_Transactions as a4 on a4.TicketNo=a3.TicketNo and a4.Details_PTransactionDate<a3.Details_PTransactionDate
left join staging.MBS_Transactions as a5 on a5.TicketNo=a4.TicketNo and a5.Details_PTransactionDate<a4.Details_PTransactionDate
left join staging.MBS_Transactions as a6 on a6.TicketNo=a5.TicketNo and a6.Details_PTransactionDate<a5.Details_PTransactionDate


group by a.TicketNo;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM