2014-11-21 55 views
0

我有2個功能,我打電話形成SSRS集查詢:在SELECT語句中引用相同的隨機值

  • fRndNumber()返回一個隨機值
  • fCheckSum()返回基於此值的計算值從fRndNumber返回。

以下語句不起作用,因爲第二次調用fRndNumber()正在生成與第一次調用不同的值。我要求fCheckSum功能使用產生相同的值由fRndNumber()

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

理想我想聲明,內容如下,但我當然不能引用「的SerialNumber」以這種方式。

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

有什麼建議嗎?

道格·P

+0

你可以存儲fRndNumber()的變量? – 2014-11-21 20:28:24

回答

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; 

更多信息,請參見here的熱膨脹係數

0

使用CTE被認爲是最佳實踐這些天。但是,如果你的服務器不支持他們,你也可以使用內嵌視圖:

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

謝謝Scott和Sam。山姆的建議是我對實施感到滿意的事情,並且會爲我完美地工作。 – DougPerk 2014-11-22 05:57:24