Как выбрать несколько значений строк в переменной в SQL Server 2005? - PullRequest
0 голосов
/ 28 ноября 2018

Я написал скрипт, который определяет переменные.

Одна из переменных определяется следующим образом.

SET @Yesterday = (SELECT SUM (ri.Sales_Quantity) 
                  FROM ReportTransactions AS RT     
                  LEFT JOIN ReportItems AS ri ON rt.Report_Transaction_ID = ri.Report_Transaction_ID    
                  LEFT JOIN MMGroups AS mmg ON ri.MMGroup2_ID = MMG.ID  
                  LEFT JOIN Locations AS L ON L.Location_ID = RT.Store_ID 
                  WHERE rt.Transaction_Date > DATEADD(DAY, -1, GETDATE()) 
                    AND (NULL IS NULL OR rt.Store_ID = NULL)   
                    AND (rt.Training_Mode IS NULL OR rt.Training_Mode = 0)   
                    AND ri.Item_Voided = 0   
                    AND ri.Void_Type = 0
                    AND rt.Transaction_Type IN (0, 1, 2, 3, 4, 5, 6)   
                    AND ri.Item_Type IN (1, 2, 3, 4, 6, 7, 54, 55, 81, 84, 11, 12, 13, 22, 25, 27, 82) 
                  GROUP BY  
                      RT.Store_ID);

Это, однако, возвращает несколько значений, поэтому не может определить переменную и выдает ошибку.

Мне нужны все эти строки для моего отчета, так как я могу определить их и получить, чтолучшая практика?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Может быть, вы могли бы попробовать табличную переменную.

DECLARE @Yesterday  Table
(
Sum_Qty  int
)
insert into @Yesterday
SELECT SUM (ri.Sales_Quantity) 
                  FROM ReportTransactions AS RT     
                  LEFT JOIN ReportItems AS ri ON rt.Report_Transaction_ID = ri.Report_Transaction_ID    
                  LEFT JOIN MMGroups AS mmg ON ri.MMGroup2_ID = MMG.ID  
                  LEFT JOIN Locations AS L ON L.Location_ID = RT.Store_ID 
                  WHERE rt.Transaction_Date > DATEADD(DAY, -1, GETDATE()) 
                    AND (NULL IS NULL OR rt.Store_ID = NULL)   
                    AND (rt.Training_Mode IS NULL OR rt.Training_Mode = 0)   
                    AND ri.Item_Voided = 0   
                    AND ri.Void_Type = 0
                    AND rt.Transaction_Type IN (0, 1, 2, 3, 4, 5, 6)   
                    AND ri.Item_Type IN (1, 2, 3, 4, 6, 7, 54, 55, 81, 84, 11, 12, 13, 22, 25, 27, 82) 
                  GROUP BY  
                      RT.Store_ID
0 голосов
/ 28 ноября 2018

Вам нужна таблица либо temporary, либо base, поскольку вам нужно несколько строк или столбцов:

SELECT RT.Store_ID, SUM (ri.Sales_Quantity) AS Sum_Qty INTO #table
FROM ReportTransactions AS RT LEFT JOIN 
     ReportItems AS ri 
     ON rt.Report_Transaction_ID = ri.Report_Transaction_ID LEFT JOIN 
     MMGroups AS mmg 
     ON ri.MMGroup2_ID = MMG.ID LEFT JOIN 
     Locations AS L 
     ON L.Location_ID = RT.Store_ID 
WHERE . . .     
GROUP BY RT.Store_ID;

однако для базовой таблицы требуется оператор INSERT INTO с оператором SELECT:

INSERT INTO table (col1, col2)
     SELECT . . . ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...