在SELECT语句中引用相同的随机值

时间:2014-11-21 19:06:54

标签: sql sql-server

我有两个函数我正在调用SSRS数据集查询:

  • fRndNumber()返回随机值
  • fCheckSum()返回基于fRndNumber返回的值的计算值。

以下语句不起作用,因为fRndNumber()的第二次调用生成的值与第一次调用不同。我要求fCheckSum函数使用fRndNumber()

生成的相同值
Select 
    fRndNumber() as SerialNumber, 
    fCheckSum(fRndNumber) as CheckSum

理想情况下,我希望声明如下,但我当然不能以这种方式引用'SerialNumber'。

Select 
    fRndNumber() as SerialNumber, 
    fCheckSum(SerialNumber) as CheckSum

有什么建议吗?

Doug P

2 个答案:

答案 0 :(得分:0)

根据您的SQL版本,您可以使用CTE ...

;WITH RandomCte AS
(
    SELECT  fRndNumber() AS SerialNumber,
            * -- add your other columns here...
    FROM    someTableName -- replace with your table name
)
SELECT  fCheckSum(SerialNumber) AS [CheckSum],
            *
FROM    RandomCte;

有关CTE的更多信息,请参阅here

答案 1 :(得分:0)

如今,使用CTE被认为是最佳做法。但是,如果您的服务器不支持它们,您也可以使用内联视图:

SELECT
  A.SerialNumber,
  fCheckSum(A.SerialNumber) AS CheckSum
FROM  (
 SELECT fRndNumber() as SerialNumber
) as A;