2016-05-25 57 views
0

我有一个输出正确信息的FETCH查询,但它通过提取输出每个循环作为输出的单独查询。将多个查询合并为单个多行输出

什么我希望做的是将结果输出到一个表(或在我的情况下,我最终将建立与此查询视图)

DECLARE @THID Cursor 
DECLARE @THIDValue int 

SET @THID = CURSOR FOR 
    SELECT  
     Transheader.ID 
    FROM    
     TransHeader WITH (nolock) 
    INNER JOIN 
     TransHeaderUserField WITH (nolock) ON TransHeader.ID = TransHeaderUserField.ID 
    WHERE   
     (TransHeaderUserField.Rework = '1') 
     AND TransHeader.ID IS NOT NULL 

OPEN @THID 

FETCH NEXT FROM @THID INTO @THIDValue 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SELECT   
     (SELECT 
      SUM(totPartCost) 
     FROM 
      TransDetail 
     WHERE 
      TransHeaderID = @THIDValue) AS ThePartCost, 
     TransHeader.OrderNumber, TransHeader.ClassTypeID, 
     TransHeader.OrderCreatedDate, TransHeaderUserField.Rework, 
     TransHeaderUserField.Rework_Type, 
     TransHeaderUserField.Rework_Orders, TransHeaderUserField.Rework_Employee, 
     TransHeaderUserField.Rework_Department, TransHeader.Description 
    FROM    
     TransHeader WITH (nolock) 
    INNER JOIN 
     TransHeaderUserField WITH (nolock) ON TransHeader.ID = TransHeaderUserField.ID 
    WHERE   
     (TransHeaderUserField.Rework = '1') AND TransHeader.ID = @THIDValue 
    ORDER BY 
     TransHeaderUserField.Rework_Department, TransHeaderUserField.Rework_Employee 

    FETCH NEXT FROM @THID INTO @THIDValue 
END 

CLOSE @THID 
DEALLOCATE @THID 

enter image description here

+1

设置[坏习惯踢 - 把NOLOCK无处不在](http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/) - 不建议(根本不要)在任何地方使用它 - 恰恰相反! –

回答

1

将每个选择到临时表中,并且在完成循环的所有迭代后,从临时表中选择*。