我需要根据另一个表中的列datalength更新表中的列。
表:
SOURCE:
Item_Group Name
------------|-----------
1000 | Joe
1001 | Jill
1002 | Joanna
222222 | James
333333 | John
DESTINATION:
Item | Group | Person
------------|-----------|----
1000 | 000001 |
1001 | 000002 |
9998 | 222222 |
9999 | 333333 |
UPDATED DESTINATION:
Item | Group | Person
------------|-----------|----
1000 | 000001 | Joe
1001 | 000002 | Jill
9998 | 222222 | James
9999 | 333333 | John
更新应基于Item_Group
的数据,如果数据为4,则应基于项进行更新,如果数据为6,则应基于组进行更新。
我有两个独立的查询,我相信这是起作用的。
UPDATE table_dest
SET Person = a.Name
FROM table_source a, table_dest b
WHERE a.Item_Group = b.Item
AND DATALENGTH(a.Item_Group) = 4
GO
UPDATE table_dest
SET Person = a.Name
FROM table_source a, table_dest b
WHERE a.Item_Group = b.Group
AND DATALENGTH(a.Item_Group) = 6
GO
这是如何在一个查询中完成的?
发布于 2020-02-25 01:54:54
您可以使用apply
:
UPDATE dt
SET dt.Person = s.Name
FROM table_dest dt CROSS APPLY
( VALUES (dt.Item), (dt.[Group])
) dtt(ItemGroup) INNER JOIN
table_source s
ON s.Item_Group = dtt.ItemGroup;
发布于 2020-02-25 02:17:11
CREATE TABLE #tempSOURCE(Item_Group INT,NAME VARCHAR(50))
INSERT INTO #tempSOURCE(Item_Group,[NAME])VALUES(1000,'Joe')
INSERT INTO #tempSOURCE(Item_Group,[NAME])VALUES(1001,'Jill')
INSERT INTO #tempSOURCE(Item_Group,[NAME])VALUES(1002,'Joanna')
INSERT INTO #tempSOURCE(Item_Group,[NAME])VALUES(222222,'James')
INSERT INTO #tempSOURCE(Item_Group,[NAME])VALUES(333333,'John')
CREATE TABLE #tempDESTINATION(Item INT,Destgroup INT,Person VARCHAR(50))
INSERT INTO #tempDESTINATION(Item, Destgroup, Person) VALUES(1000,000001,'')
INSERT INTO #tempDESTINATION(Item, Destgroup, Person) VALUES(1001,000002,'')
INSERT INTO #tempDESTINATION(Item, Destgroup, Person) VALUES(9998,222222,'')
INSERT INTO #tempDESTINATION(Item, Destgroup, Person) VALUES(9999,333333,'')
SELECT * FROM #tempSOURCE
SELECT * FROM #tempDESTINATION
UPDATE b
SET b.Person= CASE WHEN a.Item_Group=b.Item THEN a.Name ELSE
CASE WHEN b.Destgroup=a.Item_Group THEN a.Name END END
FROM #tempSOURCE a inner join #tempDESTINATION b
ON a.Item_Group=b.Item
OR b.Destgroup=a.Item_Group
SELECT * FROM #tempDESTINATION
注:-我用的是..。在#tempDESTINATION列名中,保留了..because..Group组的关键字。
在这里,我使用join ..instead来检查column..you的数据,column..you将得到您的输出
发布于 2020-02-25 02:45:54
尝尝这个。
UPDATE b SET PERSON=nAME
FROM #tempDESTINATION B
cross apply (
select * from #tempSOURCE A where a.Item_Group = b.Item and DATALENGTH(a.Item_Group)=4
UNION
select * from #tempSOURCE A where a.Item_Group = b.Destgroup and DATALENGTH(a.Item_Group)=6
) Name1
https://stackoverflow.com/questions/60391207
复制