Sql server T-SQL-客户链接
请运行下面的代码,这些都是相同的客户,因为其中两个拥有相同的税号,而另一个基于公司名称匹配。我需要将它们链接起来,并根据最先创建的人设置ParentCompanyID。我正在努力把它们联系起来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
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问题中的样本数据应该已经涵盖了这一点。