2017-04-26 66 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