表1:
用戶 時間 訂單型別 金額
1 20190201 sale 299
2 20190401 sale 599
3 20190501 other 199
3 20190601 other 199
3 20190801 other 399
加一列 value ,當訂單型別是other,金額>0 且<200且最小時間值為 AA
當訂單型別是other,金額>=200 且<400且最小時間值為 BB
結果:
用戶 時間 訂單型別 金額 value
1 20190201 sale 299
2 20190401 sale 599
3 20190501 other 199 AA
3 20190601 other 199
3 20190801 other 399 BB
uj5u.com熱心網友回復:
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL
DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[用戶] NVARCHAR(20)
,[時間] DATETIME
,[訂單型別] NVARCHAR(20)
,[金額] INT
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'1',N'20190201',N'sale',N'299')
INSERT INTO dbo.[t] VALUES(N'2',N'20190401',N'sale',N'599')
INSERT INTO dbo.[t] VALUES(N'3',N'20190501',N'other',N'199')
INSERT INTO dbo.[t] VALUES(N'3',N'20190601',N'other',N'199')
INSERT INTO dbo.[t] VALUES(N'3',N'20190801',N'other',N'399')
------------ 測驗表及測驗資料
--添加 1 列
ALTER TABLE t ADD [value] VARCHAR(20)
GO
;WITH cte AS (
SELECT ROW_NUMBER() OVER (ORDER BY [時間]) AS rid,*
FROM t WHERE 訂單型別='other' AND 金額>0 AND 金額<200
)
UPDATE cte
SET [value]='AA'
FROM cte WHERE cte.rid=1
;WITH cte AS (
SELECT ROW_NUMBER() OVER (ORDER BY [時間]) AS rid,*
FROM t WHERE 訂單型別='other' AND 金額>=200 AND 金額<400
)
UPDATE cte
SET [value]='BB'
FROM cte WHERE cte.rid=1
SELECT * FROM t
/*
用戶 時間 訂單型別 金額 value
1 2019-02-01 00:00:00.000 sale 299 NULL
2 2019-04-01 00:00:00.000 sale 599 NULL
3 2019-05-01 00:00:00.000 other 199 AA
3 2019-06-01 00:00:00.000 other 199 NULL
3 2019-08-01 00:00:00.000 other 399 BB
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/143987.html
標籤:基礎類
上一篇:新手小白求指教
下一篇:堆疊
