我有兩個表,如下所示:
| 訂單號 | 客戶ID |
|---|---|
| 1 | 1001 |
| 2 | 1002 |
| 3 | 1003 |
| 4 | 1003 |
另一個是這樣的:
| 用戶身份 | Service1FirstOrderID | 服務 2 第一順序 ID | Service3FirstOrderID |
|---|---|---|---|
| 1001 | 空值 | 1 | 空值 |
| 1002 | 2 | 空值 | 空值 |
| 1003 | 3 | 空值 | 4 |
現在我想加入這兩個表,以便我可以獲取ServiceID已購買的每個客戶 ID 。
| 用戶身份 | 服務 |
|---|---|
| 1001 | 2 |
| 1002 | 1 |
| 1003 | 1 |
| 1003 | 3 |
任何幫助,將不勝感激。
uj5u.com熱心網友回復:
可以加入 IN
SELECT so.userID , CASE WHEN o.OrderID = so.Service1FirstOrderID THEN 1 WHEN o.OrderID = so.Service2FirstOrderID THEN 2 WHEN o.OrderID = so.Service3FirstOrderID THEN 3 END AS Service FROM Orders o INNER JOIN ServiceOrders so ON so.userID = o.customerID AND o.OrderID IN (so.Service1FirstOrderID, so.Service2FirstOrderID, so.Service3FirstOrderID) ORDER BY o.customerID;
| 用戶身份 | 服務 |
|---|---|
| 1001 | 2 |
| 1002 | 1 |
| 1003 | 1 |
| 1003 | 3 |
關于db<>fiddle 的演示在這里
uj5u.com熱心網友回復:
您有一個嚴重非規范化的表結構,但這似乎根本不是連接。
它似乎純粹是第二個表的有條件逆樞軸,您可以使用它 CROSS APPLY
SELECT
t2.UserId,
v.*
FROM table2 t2
CROSS APPLY (
SELECT 1
WHERE Service1FirstOrderID IS NOT NULL
UNION ALL
SELECT 2
WHERE Service2FirstOrderID IS NOT NULL
UNION ALL
SELECT 3
WHERE Service3FirstOrderID IS NOT NULL
) v(Service);
資料庫<>小提琴
uj5u.com熱心網友回復:
您可以使用 CTE 來實作這一點。
;WITH CTE_ServiceOrder as
(
SELECT UserId, 1 AS ServiceId, Service1FirstOrderID as orderId
from ServiceOrders
where Service1FirstOrderId is not null
union all
SELECT UserId, 2, Service2FirstOrderID as orderId
from ServiceOrders
where Service2FirstOrderId is not null
union all
SELECT UserId, 3, Service3FirstOrderID as orderId
from ServiceOrders
where Service3FirstOrderId is not null
)
SELECT o.customerID, s.ServiceId FROM CTE_ServiceOrder as s
INNER JOIN Orders as o
on o.orderID = s.orderid
order by o.customerID
感謝@Lukstorms 創建腳本。
你可以參考dbfiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/395799.html
標籤:sql sql-server
上一篇:在2個SQLServer上呈現資料庫,就像它們都在1上一樣
下一篇:居中移動SVG
