代码之家  ›  专栏  ›  技术社区  ›  Etienne

T-SQL-客户链接

  •  -1
  • Etienne  · 技术社区  · 5 年前

    税号 公司名称 . 我需要把它们都连接起来然后设置 父公司ID 根据谁是第一个被创造出来的。我正努力把他们联系起来。

    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

    任何帮助都将不胜感激。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Zohar Peled    5 年前

    使用 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
    
        2
  •  0
  •   gotqn user3521065    5 年前

    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 条款。