我需要更新金额列,并为上表中的每一行添加随机值。
但是,为此我需要满足一些规则:
例如,对于 ID = 7,随机值必须介于 $0.01 和 $0.80 之间。
我正在努力使用 RAND、CHECKSUM、NEWID 函数获得我想要的结果。 有时甚至出于某种原因将 0(零)作为随机值。
这是在 SQL Server 中。
您需要添加另一个铸件来检查金额是否小于 0.99
CREATE TABLE MyTable (
ID INTEGER,
UserID INTEGER,
RecordedTransaction VARCHAR(8),
RecordedAmount FLOAT
);
INSERT INTO MyTable
(ID, UserID, RecordedTransaction, RecordedAmount)
VALUES
('1', '12345678', 'Purchase', '0.10'),
('2', '12345678', 'Deposit', '100.00'),
('3', '12345678', 'Purchase', '100.00'),
('4', '12345678', 'Deposit', '30.00'),
('5', '12345678', 'Purchase', '30.00'),
('6', '12345678', 'Deposit', '25.00'),
('7', '12345678', 'Purchase', '0.80');
7 rows affected
UPDATE a
SET a.RecordedAmount = case when RecordedTransaction = 'Deposit' THEN FLOOR(RAND() * (20- 10 + 1)) + 10
ELSE ROUND(
(CAST(RAND(CHECKSUM(NEWID())) *
(CASE WHEN RecordedAmount < 0.99 THEN RecordedAmount ELSE 0.99 END) AS FLOAT) + 0.01 )
,2,0) end
FROM dbo.MyTable a
7 rows affected
SELECT * fROM MyTable
身份证 | 用户ID | 已记录交易 | 已记录金额 |
---|---|---|---|
1 | 12345678 | 购买 | 0.09 |
2 | 12345678 | 存款 | 19 |
3 | 12345678 | 购买 | 0.42 |
4 | 12345678 | 存款 | 19 |
5 | 12345678 | 购买 | 0.98 |
6 | 12345678 | 存款 | 19 |
7 | 12345678 | 购买 | 0.25 |