我有一張桌子,上面有以下內容:
| 姓名 | 名稱合作伙伴 | 日期開始客戶 | 日期客戶結束 |
|---|---|---|---|
| 123 | 356 | 01-01-1990 | 空值 |
| 356 | 123 | 01-01-1990 | 空值 |
| 567 | 空值 | 01-01-2020 | 空值 |
我想要的是在此表中添加一個額外列的查詢,如果我可以說第一列中的 if Name 也在 NamePartner 列中并且 DateCustomerEnd 為 NULL --> 所以持續關系,那么那些行是 1 個家庭。所以第 1 行和第 2 行應該是 1 個家庭。我想將第一列的值賦予該新列
例子:
| 姓名 | 名稱合作伙伴 | 獨特的家庭 | 日期開始客戶 | 日期客戶結束 |
|---|---|---|---|---|
| 123 | 356 | 123 | 01-01-1990 | 空值 |
| 356 | 123 | 123 | 01-01-1990 | 空值 |
| 567 | 空值 | 567 | 01-01-2020 | 空值 |
uj5u.com熱心網友回復:
下面的查詢將為您提供所需的結果集。
為此,我使用ROW_NUMBER為每一行生成一個唯一 ID。
這是建立一個獨特的家庭所必需的。根據您的示例,您似乎希望任何記錄首先成為家庭價值。理想情況下,您的源表將有一個 ID 列或主鍵用于此目的。
DROP TABLE IF EXISTS #Customer;
CREATE TABLE #Customer
(
Name INT
, NamePartner INT
, DateStartCustomer DATETIME
, DateCustomerEnd DATETIME
);
INSERT INTO #Customer
VALUES
(123, 356, '01/01/1990', NULL)
, (356, 123, '01/01/1990', NULL)
, (567, NULL, '01/01/2020', NULL);
WITH RowNum AS
(
SELECT *, ROW_NUMBER() OVER(ORDER BY Name) AS Id
FROM #Customer
)
SELECT
C.Name
, C.NamePartner
, COALESCE(HH.Name, C.Name) AS UniqueHousehold
, C.DateStartCustomer
, C.DateCustomerEnd
FROM
RowNum AS C
LEFT JOIN RowNum AS HH
ON C.NamePartner = HH.Name
AND C.Id > HH.Id;
DROP TABLE IF EXISTS #Customer;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/451910.html
上一篇:SQL-更多屬性的間隙和孤島問題
