使用额外条件在 SQL Server 中随机化值

问题描述 投票:0回答:1

我需要更新金额列,并为上表中的每一行添加随机值。

但是,为此我需要满足一些规则:

  • 对于 TransactionType = Deposit,随机值必须在 $10 到 $20 之间。
  • 对于其他所有内容,随机值必须介于 $0.01 和 $1 之间 AND 小于或等于我们随机化的原始金额

例如,对于 ID = 7,随机值必须介于 $0.01 和 $0.80 之间。

我正在努力使用 RAND、CHECKSUM、NEWID 函数获得我想要的结果。 有时甚至出于某种原因将 0(零)作为随机值。

这是在 SQL Server 中。

sql-server t-sql random checksum newid
1个回答
0
投票

您需要添加另一个铸件来检查金额是否小于 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

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.