Rya*_*yan 5 sql sql-server sql-server-2008
好的,这很难说,所以这里......
我正在使用MS SQL Server 2008 R2.我有一个临时表,可以说有两个已经填充的列.我想根据前两列的值填充第三个空列.我想要做的是为col1和col2的每个匹配组合创建一个guid(使用NEWUID()).这是一个视觉示例:
让我说我有一个最初看起来像这样的临时表:
Name Activity SpecialId
James Running
James Running
James Walking
John Running
John Running
John Walking
Run Code Online (Sandbox Code Playgroud)
我想让它更新新的GUID,使它看起来像这样:
Name Activity SpecialId
James Running SOMEFAKEGUID_1
James Running SOMEFAKEGUID_1
James Walking SOMEFAKEGUID_2
John Running SOMEFAKEGUID_3
John Running SOMEFAKEGUID_3
John Walking SOMEFAKEGUID_4
Run Code Online (Sandbox Code Playgroud)
请注意如何为每个匹配对创建新的GUID.因此,James/Running组合对所有James/Running组合具有相同的GUID ...而John/Running也具有与John/Running组合相同的GUID,但与James/Running组合的GUID不同.
我试图尽可能清楚地表明这一点,但希望这不是很清楚!
有人可以告诉我SQL查询会是什么样子,以便使用正确的GUID更新临时表吗?
提前致谢.
瑞安
使用 NEWID()似乎很痛苦。使用它,CTE 会创建一个单独的 ID,因此您需要一些中间表。
Declare @Table as table (name varchar(20), activity varchar(20) , SpecialID uniqueidentifier)
Declare @DistinctTable as table (name varchar(20), activity varchar(20) , SpecialID uniqueidentifier)
INSERT INTO @Table
(name, activity)
values
('James','Running'),
('James','Running'),
('James','Walking'),
('John','Running'),
('John','Running'),
('John','Walking')
WITH distinctt
AS (SELECT DISTINCT name,
activity
FROM @Table)
INSERT INTO @DistinctTable
SELECT name,
activity,
Newid()
FROM distinctt
UPDATE @Table
SET specialid = dt.specialid
FROM @Table t
INNER JOIN @DistinctTable dt
ON t.activity = dt.activity
AND t.name = dt.name
SELECT * FROM @Table
Run Code Online (Sandbox Code Playgroud)
生产
name activity SpecialID
-------------------- -------------------- ------------------------------------
James Running AAA22BC5-51FE-43B3-8CC9-4C4A5B4CC981
James Running AAA22BC5-51FE-43B3-8CC9-4C4A5B4CC981
James Walking 1722B76B-5F17-4931-8D7C-2ECADB5A4DFD
John Running FBC1F86B-592D-4D30-ACB3-80DA26B00900
John Running FBC1F86B-592D-4D30-ACB3-80DA26B00900
John Walking 84282844-AAFD-45CA-9218-F7933E5102C6
Run Code Online (Sandbox Code Playgroud)