Sql server SQL Server-将相同的随机数生成多列
我想生成一个随机数(5或6位),但不只是一列,实际上是4Sql server SQL Server-将相同的随机数生成多列,sql-server,Sql Server,我想生成一个随机数(5或6位),但不只是一列,实际上是4 ID1 ID2 Type LotNumber ID3 ID4 ------------------------------------------------------------- 721 721 1 Lot1 721 721 721 721
ID1 ID2 Type LotNumber ID3 ID4
-------------------------------------------------------------
721 721 1 Lot1 721 721
721 721 1 Lot1 721 721
浏览互联网和几篇文章,大部分都会生成一个随机数,只在一列中使用,就是这样。有什么方法可以使用SQL实现这一点吗?谢谢
编辑
我用了这句话:
SELECT FLOOR(RAND(CHECKSUM(NEWID()))*(99999-10000+1)+1000) AS ID
查看
CREATE VIEW MyView
AS
SELECT
'' AS ID1,
'' AS ID2,
CASE WHEN t.fADTableField4Code='Aggregated' THEN CAST(1 AS BIT) ELSE CAST(2 AS BIT) END AS Type,
ISNULL(t.fADTableField3Code, '') AS LotNumber,
'' AS ID3,
'' AS ID4
FROM MyTable AS t
GO
XML文件
XML文件必须如下所示:
<Documents>
<Document>
<ID1>721</ID1>
<ID2>721</ID2>
<Type>1</Type>
<LotNumber>Lot1</LotNumber>
<ID3>721</ID3>
<Date>2018-12-04</Date>
<Details>
<Detail>
<ID4>721</ID4>
............
</Details>
</Document>
721
721
1.
Lot1
721
2018-12-04
721
............
试试这个,然后扩展它
select a.*
, b.id as ID1, b.id as ID2 --Get ID from applied table and use as often as you need
from (select 1) as a(ID) -- this is your main table
cross apply (SELECT FLOOR(RAND(CHECKSUM(NEWID()))*(99999-10000+1)+1000) AS ID) B
您可以使用CTE或子查询
SELECT
ID1 = R.ID
,ID2 = R.ID
,ID3 = R.ID
,ID4 = R.ID
FROM
(SELECT
FLOOR(RAND(CHECKSUM(NEWID()))*(99999-10000+1)+1000)
AS ID
) R
;WITH R
AS
(SELECT
FLOOR(RAND(CHECKSUM(NEWID()))*(99999-10000+1)+1000)
AS ID
)
SELECT
ID1 = R.ID
,ID2 = R.ID
,ID3 = R.ID
,ID4 = R.ID
FROM R
给我们看看风景。在这一点上,这方面的任何人都在猜测。不过,我会问,有四列具有相同数据的意义何在。这并不能解释为什么在多个列中需要相同的值。为什么不能简单地在ID1中输入一个随机值,然后使用它呢?而且不确定在视图的列中放置随机值是一个好主意。每次你查看数据时,这些值都会发生变化。这是一种令人尖叫的行为。也许,如果你分享你真正想要实现的目标,我们可以帮助你找到解决方案。但是视图中每行有四列随机数是荒谬的。您是如何生成XML文件的?由于整个数据集的ID值相同,因此更改XML生成似乎要简单得多。这会为一行中的列获取一个随机值,但OP非常奇怪地希望每列和每行具有相同的随机值这段代码将为每一行生成一个新的随机值。我想这是他想要的。对于每一行和每一列,我都建议使用一个变量,而不是一个子查询。这就是这个问题的荒谬之处。它还必须是一个视图,因此没有变量。但我还是认为这是一个+1,因为它最接近于一个合理的解决方案。