#cursor #nested-loops
#sql #вложенные циклы #база данных-курсор
Вопрос:
У меня возникают некоторые проблемы с кодом T-SQl, который выглядит следующим образом :
DECLARE @current_customer_id INT; DECLARE @current_customer_name VARCHAR(max); DECLARE @current_month INT ; DECLARE @query_for_months VARCHAR(max); DECLARE @transpose varchar(max); SET @transpose=',(select SUM(TAB.price) from (select Scu.CustomerID as CuID , Scu.CustomerName as CuName , SIL.Quantity*SIL.UnitPrice as price , SI.InvoiceDate from Sales.Customers as Scu INNER JOIN Sales.Invoices as SI on Scu.CustomerID=SI.CustomerID INNER JOIN Sales.InvoiceLines as SIL on SI.InvoiceID=SIL.InvoiceID where MONTH(SI.invoicedate)=lt;current_monthgt; and YEAR(SI.invoicedate)=2013 and SCU.CustomerID=lt;current_customer_idgt; )AS TAB group by TAB.CuID, TAB.CuName) as total_value_lt;current_monthgt;' DECLARE cursornameid CURSOR FOR select CustomerID from Sales.Customers Order by customername ASC ; open cursornameid ; fetch next from cursornameid into @current_customer_id While @@FETCH_STATUS=0 BEGIN DECLARE cursormonth CURSOR for select num_month from months ; SET @query_for_months='select 1 as customer' SET @transpose=REPLACE(@transpose,'lt;current_customer_idgt;',@current_customer_id) Open cursormonth ; fetch next from cursormonth into @current_month ; while @@FETCH_STATUS=0 BEGIN SET=@query_for_months=@query_for_months REPLACE(@transpose,'lt;current_monthgt;',@current_month) ; fetch next from cursormonth into @current_month ; END CLOSE cursormonth ; DEALLOCATE cursormonth; FETCH NEXT FROM cursornameid into @current_customer_id END close cursornameid; DEALLOCATE cursornameid ; Exec(@query_for_months)
Этот код показывает только первый результат внешнего цикла (для первого клиента за все месяцы), но он не смог перейти ко второму , кажется, что два цикла правильно вложены, и я игнорирую, почему он это делает, пожалуйста, помогите ! Лучшие