Sql server 在SQL Server中交换表中的列值
我有问题要解决: 假设数据库中有表TAB1(id、numb、text)。任务是在“text”列中的某个查询上交换“numb”列中的两个列值 例如: 我们有Sql server 在SQL Server中交换表中的列值,sql-server,Sql Server,我有问题要解决: 假设数据库中有表TAB1(id、numb、text)。任务是在“text”列中的某个查询上交换“numb”列中的两个列值 例如: 我们有 ID | NUMB | TEXT 1 | 22 | hello <- this record 2 | 25 | today 3 | 34 | wow <- this record 4 | 53 | what 但是这个查询不想执行-弹出错误'Recipient B.numb re
ID | NUMB | TEXT
1 | 22 | hello <- this record
2 | 25 | today
3 | 34 | wow <- this record
4 | 53 | what
但是这个查询不想执行-弹出错误'Recipient B.numb repeated'
请给我一些建议。通常不应在单个查询中尝试此操作,但使用SQL SERVER 2005您可以尝试
DECLARE @TableA TABLE(
ID INT,
NUMB INT,
TEXT VARCHAR(20)
)
INSERT INTO @TableA SELECT 1,22,'hello'
INSERT INTO @TableA SELECT 2,25,'today'
INSERT INTO @TableA SELECT 3,34,'wow'
INSERT INTO @TableA SELECT 4,53,'what'
SELECT *
FROM @TableA
;WITH Vals1 AS(
SELECT *
FROM @TableA
WHERE TEXT = 'hello'
),
Vals2 AS(
SELECT *
FROM @TableA
WHERE TEXT = 'wow'
)
UPDATE @TableA
SET NUMB = CASE
WHEN t.TEXT = Vals1.TEXT THEN Vals2.NUMB
WHEN t.TEXT = Vals2.TEXT THEN Vals1.NUMB
ELSE t.NUMB
END
FROM @TableA t,
Vals1,
Vals2
SELECT *
FROM @TableA
通常不应在单个查询中尝试此操作,但可以使用SQLServer2005进行尝试
DECLARE @TableA TABLE(
ID INT,
NUMB INT,
TEXT VARCHAR(20)
)
INSERT INTO @TableA SELECT 1,22,'hello'
INSERT INTO @TableA SELECT 2,25,'today'
INSERT INTO @TableA SELECT 3,34,'wow'
INSERT INTO @TableA SELECT 4,53,'what'
SELECT *
FROM @TableA
;WITH Vals1 AS(
SELECT *
FROM @TableA
WHERE TEXT = 'hello'
),
Vals2 AS(
SELECT *
FROM @TableA
WHERE TEXT = 'wow'
)
UPDATE @TableA
SET NUMB = CASE
WHEN t.TEXT = Vals1.TEXT THEN Vals2.NUMB
WHEN t.TEXT = Vals2.TEXT THEN Vals1.NUMB
ELSE t.NUMB
END
FROM @TableA t,
Vals1,
Vals2
SELECT *
FROM @TableA
当numb列是数字时(我从numb列中找到的数据猜测),你如何说“WHERE A.numb='hello'和B.numb='wow'”?当numb列是数字时(我从numb列中找到的数据猜测),你如何说“WHERE A.numb='hello'和B.numb='wow'
DECLARE @TableA TABLE(
ID INT,
NUMB INT,
TEXT VARCHAR(20)
)
INSERT INTO @TableA SELECT 1,22,'hello'
INSERT INTO @TableA SELECT 2,25,'today'
INSERT INTO @TableA SELECT 3,34,'wow'
INSERT INTO @TableA SELECT 4,53,'what'
SELECT *
FROM @TableA
;WITH Vals1 AS(
SELECT *
FROM @TableA
WHERE TEXT = 'hello'
),
Vals2 AS(
SELECT *
FROM @TableA
WHERE TEXT = 'wow'
)
UPDATE @TableA
SET NUMB = CASE
WHEN t.TEXT = Vals1.TEXT THEN Vals2.NUMB
WHEN t.TEXT = Vals2.TEXT THEN Vals1.NUMB
ELSE t.NUMB
END
FROM @TableA t,
Vals1,
Vals2
SELECT *
FROM @TableA