Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server T-SQL-客户链接_Sql Server_Tsql_Group By - Fatal编程技术网

Sql server T-SQL-客户链接

Sql server T-SQL-客户链接,sql-server,tsql,group-by,Sql Server,Tsql,Group By,请运行下面的代码,这些都是相同的客户,因为其中两个拥有相同的税号,而另一个基于公司名称匹配。我需要将它们链接起来,并根据最先创建的人设置ParentCompanyID。我正在努力把它们联系起来 CREATE TABLE #Temp ( CustomerID INT, CustomerName VARCHAR(20), CustomerTaxNumber INT, CreatedDate DATE ) INSERT INTO #Temp VAL

请运行下面的代码,这些都是相同的客户,因为其中两个拥有相同的税号,而另一个基于公司名称匹配。我需要将它们链接起来,并根据最先创建的人设置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
下面是我需要的结果。。。。

任何帮助都将不胜感激

试试这个:

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


你是说条件很简单-获得第一条记录。如果需要以某种方式对记录进行分组,可以在
交叉应用
子句中添加额外的筛选。

使用
大小写
表达式和
第一个值
可以得到所需的结果:

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

很好,您已经发布了正确的示例数据,而不是图像,而是所需的输出(格式化文本将是更好的选择)。然而,拥有超过3k的声誉积分,你应该知道。请在您的帖子中加入您当前的尝试。谢谢,这对这些记录有效,但我的表格中也有其他属于该公司的结果。示例:(9,'XXXX PTY',NULL,'2019-09-30')@etienne问题中的样本数据应该已经涵盖了这一点。