我目前有多个下面的查询(实际代码的小片段),我多次执行UNION ALL SELECT
,因为订单可能有1到5个与之相关的贷款。但是,我想知道如何动态引入LoanOrder
(如果可能),我不会使用UNION ALL
并只调整LoanOrder
?这样,如果实际上只有一个与订单关联的贷款,我不会再运行两个额外的SELECT
报表。虽然我目前的方法有效,但我只是试图更好地优化并为我未来的工作学习新东西。提前致谢!动态SQL JOIN而不是UNION
SELECT DISTINCT
-- 1st Loan Premiums
L.LoanOrder
,'Loan Premium' AS 'Type'
,'Policies:' AS 'Type1'
FROM
Orders O
LEFT JOIN Loan L
ON O.OrdersID = L.OrdersID
AND L.LoanOrder = 1
UNION ALL
SELECT DISTINCT
-- 2nd Loan Premiums
L.LoanOrder
,'Loan Premium' AS 'Type'
,'Policies:' AS 'Type1'
FROM
Orders O
LEFT JOIN Loan L
ON O.OrdersID = L.OrdersID
AND L.LoanOrder = 2
UNION ALL
SELECT DISTINCT
-- 3rd Loan Premiums
L.LoanOrder
,'Loan Premium' AS 'Type'
,'Policies:' AS 'Type1'
FROM
Orders O
LEFT JOIN Loan L
ON O.OrdersID = L.OrdersID
AND L.LoanOrder = 3
UNION ALL
SELECT DISTINCT
-- 4th Loan Premiums
L.LoanOrder
,'Loan Premium' AS 'Type'
,'Policies:' AS 'Type1'
FROM
Orders O
LEFT JOIN Loan L
ON O.OrdersID = L.OrdersID
AND L.LoanOrder = 4
UNION ALL
SELECT DISTINCT
-- 5th Loan Premiums
L.LoanOrder
,'Loan Premium' AS 'Type'
,'Policies:' AS 'Type1'
FROM
Orders O
LEFT JOIN Loan L
ON O.OrdersID = L.OrdersID
AND L.LoanOrder = 5
好像改变是L.LoadOrder =#唯一;也许我不明白这个问题,但你不能只写: 'SELECT DISTINCT LoanOrder,'Loan Premium','Policies'FROM Orders O LEFT JOIN Loan L ON(O.OrdersID = L.OrdersID AND L .LoanOrder IN(1,2,3,4,5))' 这将为您带来所有订单,并在贷款订单介于1和5之间(包括1和5)的贷款表上存在匹配记录。 – 2015-03-30 18:11:36
此外,如果你只想要订单有贷款的地方,添加以下WHERE子句: ' WHERE L.OrdersID不是NULL' – 2015-03-30 18:15:01
哇,我甚至没有关于使用'IN'运算符。这正是我需要做的,并且不需要多个'UNION'语句。这次真是万分感谢!我会回到现在感觉像个傻瓜。 :) @Kalmino – PicoDeGallo 2015-03-30 18:19:24