2017-04-26 64 views
0

我正在嘗試爲計數器和相應的值定義多個計數值。這裏是我的代碼:在計數值中聲明多列

DECLARE @RequestDate AS DATE = '2017-04-20' 
; 
DECLARE @POCounter INT; 
DECLARE @POMax INT; 
DECLARE @NewDate DATE; 

SET @POCounter = 0; 

SET @POMax = 
(
SELECT 
    CUSTOMERPONUMBER, 
    (
    SELECT 
    COUNT(CUSTOMERPONUMBER) 
    FROM DailyOpenOrders$ 
    WHERE 
    RequestDate < @RequestDate 
    ) 
FROM DailyOpenOrders$ 
WHERE 
    RequestDate < @RequestDate 
GROUP BY 
    CUSTOMERPONUMBER 
) 

的@POMax計數器來幫我更新的日期,很多次,具體customerPO。我打算在一個循環中增加POCounter,直到它到達每個customerPOnumber的@POmax計數器。

我這樣做不對嗎?有人可以幫忙嗎?

+0

你使用MySQL或MS SQL Server?不要標記不涉及的產品。 – jarlh

+0

對不起! MS SQL Server – Goal7

+3

我不明白你在這裏要做什麼。您的查詢將返回多行(和兩列)。如果你能解釋你正在努力完成的事情,我們可以提供幫助。 –

回答

2

@POMax是一個標量變量,並且可以一次只容納一個值。

如果你想保存值的集合,表變量是一個好工具:

DECLARE @MyTable TABLE 
(
    ID int PRIMARY KEY IDENTITY(1,1), 
    CustomerNumber varchar(50), 
    [TheCount] int 
) 

INSERT INTO @MyTable(CustomerNumber, [TheCount]) 
SELECT CustomerNumber, COUNT(*) 
FROM SomeTable 
GROUP BY CustomerNumber 

現在,您可以遍歷@MyTable,併爲每個CUSTOMERNUMBER,從1迴路TheCount。 ..

DECLARE @MyID int 

SET @MyID = (SELECT MIN(ID) FROM @MyTable) 

WHILE @MyID is not null 
BEGIN 

    SELECT * FROM @MyTable WHERE ID = @MyID 

    SET @MyID = (SELECT MIN(ID) FROM @MyTable WHERE @MyID < ID) 
END 
+0

非常感謝!這就像一個魅力。你能幫我用計數器循環「@Mytable」嗎?我以前從來沒有打過桌子。 – Goal7