MSSQL資料庫S 有表T 有列 ID,內容,電話,
如果列 內容 里包含有字符 123456 且這樣的行數大于1 就設定ID最小的行 的 電話 為 123456 其它行的列 電話 設定為 重復
比如
原始資料:
id 內容 電話
1 a123456
2 hjj
3 222ff
4 1234nn
5 b123456
6 jjd123456bbj
實作后
id 內容 電話
1 a123456 123456
2 hjj
3 222ff
4 1234nn
5 b123456 重復
6 jjd123456bbj 重復
謝謝!
uj5u.com熱心網友回復:
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL
DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[id] INT
,[內容] NVARCHAR(30)
,[電話] NVARCHAR(30)
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'1',N'a123456','')
INSERT INTO dbo.[t] VALUES(N'2',N'hjj','')
INSERT INTO dbo.[t] VALUES(N'3',N'222ff','')
INSERT INTO dbo.[t] VALUES(N'4',N'1234nn','')
INSERT INTO dbo.[t] VALUES(N'5',N'b123456','')
INSERT INTO dbo.[t] VALUES(N'6',N'jjd123456bbj','')
GO
-------- 以上為測驗表和測驗資料 ----------
--1. 用公共表運算式更新資料
;WITH cte AS (
SELECT ROW_NUMBER() OVER (ORDER BY id ) AS rid,*
FROM t
WHERE t.[內容] LIKE '%123456%'
)
UPDATE cte
SET 電話=CASE WHEN rid=1 THEN '123456' ELSE '重復' END
--2. 查詢更新后的資料
SELECT * FROM t
/*
id 內容 電話
1 a123456 123456
2 hjj
3 222ff
4 1234nn
5 b123456 重復
6 jjd123456bbj 重復
*/
uj5u.com熱心網友回復:
CREATE TABLE #A(
ID INT,
內容 VARCHAR(20),
電話 VARCHAR(20)
)
INSERT INTO #A VALUES (1,'a123456','')
INSERT INTO #A VALUES (2,'hjj','')
INSERT INTO #A VALUES (3,'222ff','')
INSERT INTO #A VALUES (4,'1234nn','')
INSERT INTO #A VALUES (5,'b123456','')
INSERT INTO #A VALUES (6,'jjd123456bbj','')
SELECT A.ID,A.內容,
CASE
WHEN A.內容 LIKE '%123456%' AND A.RN = 1 THEN '123456'
WHEN A.內容 LIKE '%123456%' AND A.RN != 1 THEN '重復'
WHEN A.內容 LIKE '%123456%' AND A.RN = 1 THEN '' END 電話 FROM (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY (CASE WHEN 內容 LIKE '%123456%' THEN 1 ELSE 0 END) ORDER BY ID) RN
FROM #A)A ORDER BY ID
DROP TABLE #A
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/250860.html
標籤:基礎類
