Ian*_*oyd 7 sql-server full-outer-join
我需要将Header和Detail行连接到一个结果集中:
(样本DDL并inserts
遵循):
订单:
OrderID OrderDate CurrencyID BuyAmount BuyRate
======= ======================= ========== ========= ========
1 2011-09-01 15:57:00.000 7 12173.60 1.243893
1 2011-09-01 15:57:00.000 9 69.48 1
Run Code Online (Sandbox Code Playgroud)
订单详细信息:
OrderID CurrencyID SellAmount SellRate
======= ========== ========== ========
1 7 10000 1
1 8 12384 0.9638
Run Code Online (Sandbox Code Playgroud)
我希望他们加入OrderID
并且CurrencyID
:
OrderID CurrencyID BuyAmount BuyRate SellAmount SellRate
======= ========== ========= ======== ========== ========
1 7 12173.60 1.243893 10000 1
1 8 NULL NULL 12384 0.9638
1 9 69.48 1 NULL NULL
Run Code Online (Sandbox Code Playgroud)
--USE Scratch
--Create a temporary `Orders` and, `OrderDetails` tables:
IF OBJECT_ID('tempdb..#Orders') > 0 DROP TABLE #Orders
CREATE TABLE #Orders
(
OrderID int NOT NULL,
OrderDate datetime NOT NULL,
CurrencyID int NOT NULL,
BuyAmount money NOT NULL,
BuyRate real NOT NULL
)
IF OBJECT_ID('tempdb..#OrderDetails') > 0 DROP TABLE #OrderDetails
CREATE TABLE #OrderDetails
(
OrderID int NOT NULL,
CurrencyID int NOT NULL,
SellAmount money NOT NULL,
SellRate real NOT NULL
)
-- **Insert sample data:**
INSERT INTO #Orders (OrderID, OrderDate, CurrencyID, BuyAmount, BuyRate)
VALUES (1, '20110901 15:57:00', 7, 12173.60, 1.2438933)
INSERT INTO #Orders (OrderID, OrderDate, CurrencyID, BuyAmount, BuyRate)
VALUES (1, '20110901 15:57:00', 9, 69.48, 1)
INSERT INTO #OrderDetails (OrderID, CurrencyID, SellAmount, SellRate)
VALUES (1, 7, 10000, 1)
INSERT INTO #OrderDetails (OrderID, CurrencyID, SellAmount, SellRate)
VALUES (1, 8, 12384, 0.9638)
/*Desired Output:
OrderID CurrencyID BuyAmount BuyRate SellAmount SellRate
======= ========== ========= ======== ========== ========
1 7 12173.60 1.243893 10000 1
1 8 NULL NULL 12384 0.9638
1 9 69.48 1 NULL NULL
*/
Run Code Online (Sandbox Code Playgroud)
我无法找到的组合RIGHT OUTER JOIN
,FULL OUTER JOIN
,COALESCE
能够产生我所期望的输出.
更新:
这也有可能是OrderDetails
不包含匹配CurrencyID
从Orders
表:
订单:
OrderID CurrencyID BuyAmount BuyRate
======= ========== ========= ========
1 7 12173.60 1.243893
1 9 69.48 1
Run Code Online (Sandbox Code Playgroud)
订单详细信息:
OrderID CurrencyID SellAmount SellRate
======= ========== ========== ========
1 8 12384 0.9638
Run Code Online (Sandbox Code Playgroud)
那么,你尝试过这个吗?
SELECT
COALESCE(o.OrderID, od.OrderID) AS OrderID,
COALESCE(o.CurrencyID, od.CurrencyID) AS CurrencyID,
o.BuyAmount,
o.BuyRate,
od.SellAmount,
od.SellRate
FROM
#Orders AS o
FULL OUTER JOIN #OrderDetails AS od
ON o.OrderID = od.OrderID
AND o.CurrencyID = od.CurrencyID
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
271 次 |
最近记录: |