T-SQL - Ссылки клиентов - PullRequest
       50

T-SQL - Ссылки клиентов

0 голосов
/ 20 сентября 2019

Пожалуйста, запустите приведенный ниже код, это все один и тот же клиент, потому что 2 из них имеют одинаковый TaxNumber , а другой соответствует одному на основе CompanyName .Мне нужно связать их все и установить ParentCompanyID в зависимости от того, кто был создан первым.Я изо всех сил пытаюсь связать их.

CREATE TABLE #Temp
(
  CustomerID        INT,
  CustomerName      VARCHAR(20),
  CustomerTaxNumber INT,
  CreatedDate       DATE
)

INSERT INTO #Temp
VALUES (8, 'Company PTY',1234, '2019-09-20'),
       (2, 'Company PT', 1234, '2019-09-24'),
       (3, 'Company PTY',NULL, '2019-09-29')

SELECT * FROM #Temp

Ниже приведен результат, который мне требуется .... enter image description here

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Использование case выражения с first_value может дать вам желаемые результаты:

SELECT CustomerID, CustomerName, CustomerTaxNumber, CreatedDate,
        CASE WHEN  CustomerTaxNumber IS NULL THEN
            FIRST_VALUE(CustomerID) OVER(PARTITION BY CustomerName ORDER BY CreatedDate)
        ELSE
            FIRST_VALUE(CustomerID) OVER(PARTITION BY CustomerTaxNumber ORDER BY CreatedDate)
        END As ParentCompanyID

FROM #Temp
0 голосов
/ 20 сентября 2019

Попробуйте:

CREATE TABLE #Temp
(
  CustomerID        INT,
  CustomerName      VARCHAR(20),
  CustomerTaxNumber INT,
  CreatedDate       DATE
)

INSERT INTO #Temp
VALUES (8, 'Company PTY',1234, '2019-09-20'),
       (2, 'Company PT', 1234, '2019-09-24'),
       (3, 'Company PTY',NULL, '2019-09-29')

SELECT DS.[CreatedDate] AS [FirstEntry]
      ,DS.[CustomerID] AS [ParentCompanyID]
      ,#Temp.*
FROM #Temp
CROSS APPLY
(
    SELECT TOP 1 *
    FROM #Temp
    ORDER BY CreatedDate
) DS


DROP TABLE #Temp

enter image description here

Вы достаточно просты - получите первую запись.Если вам нужно каким-то образом сгруппировать записи, вы можете добавить дополнительную фильтрацию в предложении CROSS APPLY.

...