2016-02-03 55 views
0

我有一個有兩個變量的存儲過程。它們是@DateLeft@DateRight@DateLeft是我想設置的等於查詢結果的變量。 @DateRight = GETDATE()。我有以下數據:如何將變量的值設置爲SQL中查詢的結果?

編輯2:添加了「距離」列

Date   Code Distance  **The values in the distance column are arbitrary and they are there for example's sake 
11/23/2015 A  456 
12/28/2015 B  2163 
1/25/2016 C  203 
4/30/2015 D  8921 

我的存儲過程是應該使用@DateLeft@DateRight確定控制另一計算一個時間範圍。這些日期是特定事件發生的最近日期。我應該使用Date列中的日期作爲Code列中每個不同代碼的@DateLeft值。例如,程序應該運行並獲得11/23/2015作爲代碼A@DateLeft的值。然後,它將進行計算並繼續前進,並獲得代碼B12/28/2015,依此類推。我不知道如何執行此計算,以便它不必再次運行整個過程來使用@DateLeft的不同日期進行計算。我對最終結果的查詢看起來是這樣的:

SELECT SUM(TraveledDistance) AS Distance, Code 
FROM MyTable 
WHERE 
Time BETWEEN @DateLeft AND @DateRight 

我願做這樣的事情,也許(我當然願意接受建議):

SET @DateLeft = Select Date From SampleTable 
       Group By Code --I know this doesn't work 

任何幫助表示讚賞。

編輯:程序本身的描述

該過程採用的@DateLeft值(其中,因爲它代表,是的參數),並使用它作爲一個過濾器,以計算該日期之間的行進距離和今天的日期(@DateRight)。如果你願意,你可以組成計算部分。我更關心的是我應該採取什麼方法將@DateLeft設置爲每個代碼的不同日期,而不必重複該過程多次。

+1

退房'選擇INTO':https://msdn.microsoft.com/en-us/library/ms188029.aspx – zimdanen

+0

@zimdanen感謝您的參考。有沒有另外一種方法來做到這一點,不需要創建一個單獨的表來存儲日期? – ic3man7019

+0

我認爲你的程序不需要你正在使用的兩個參數。 –

回答

-2

你的方法的工作原理如下:SET @DateLeft =(選擇日期從樣品表集團通過代碼)

1
DECLARE @DateLeft DATE; 
SELECT @DateLeft = [Date] From SampleTable Group By Code 

您可以設置使用此語法的變量值。

更新基於OP的更新:

的OP的更新的要求並不十分清楚,但我相信一個循環可以做的伎倆。

DECLARE @DateLeft DATE; 
DECLARE @Level INT = 0; 
WHILE @Level < (SELECT COUNT(*) FROM SampleTable) 
BEGIN 
    SELECT @DateLeft = [Date] From SampleTable Group By Code; 
    --do something with @DateLeft 

    SET @Level = @Level + 1; 
END 
+0

我認爲這不是他正在尋找的 –

+0

@haytem - 是怎麼回事? OP想要從表中將[Date]的值轉換爲變量。這就是這樣做的。 –

+0

@devlincarnate我希望能夠獲得該值,進行計算,然後獲取下一個代碼的下一個值並進行計算。你有什麼建議嗎? – ic3man7019

0

如果你需要做這樣一個循環,你可能需要查看SQL服務器遊標。

如果你不需要一個循環,你總是可以選擇價值這樣一個變量:

declare @DateLeft as datetime; 
SELECT @DateLeft = Date 
From SampleTable 
Group By Code; 
+0

感謝您的建議。有沒有辦法讓'@'DateLeft'爲每個不同的代碼改變它的值?每個代碼都有不同的日期值,在計算髮生時必須將其考慮在內。 – ic3man7019

+0

我認爲你需要看看SQL Server Cursor。 – Yingy

0

也許這樣的事情是你在找什麼?:

select 
    (
     /* calculation goes here */ 
     select sum(m.TraveledDistance) as Distance 
     from MyTable m 
     /* correlate the subquery on t.Code and max t.Date */ 
     where m.Code = t.Code and m.Time between max(t.Date) and getdate() 
    ) as Calculation, 
    t.Code 
from SampleTable t 
group by t.Code 
相關問題