2016-02-11 5 views
0

У меня есть две таблицы в SQL Server 2008, в одном я есть потребности статей в неделю, а в другом у меня есть запас, что-нибудь вродеPivot более чем один столбец

НУЖД:

Article      Week       Need 

-------------------------------------------------------------------- 

aa       1        25 
aa       2        13 
aa       4        33 
aa       6        21 
aa       25        40 
ab       1         1 
ab       2         3 
ab       16        14 
ab       50        50 

STOCKS

Article      Units 
--------------------------------------------------------------------------- 
    aa       80  
    ab       14 
    ac        8     

и мне нужно, чтобы показать что-то вроде:

Article  WEEK1   WEEK2  WEEK4   WEEK6  WEEK16  WEEK25 
      needs stock needs stock needs stock needs stock needs stock needs stock 


aa   25 80  13 55  42 22  21 20  0 -1  40 -1 
ab   1 14  3 13  0 10  0 10  14 10   0 -4 

Это покажет в Encel, для этого я использую C# и T-SQL, моя проблема заключается в том, что если использовать PIVOT я могу Oly сделать это с потребностями в неделю, но я ожидаю потребности и акции, если я обойтись без поворота я могу получить статью неделю акции, сохранить данные в объектах и ​​сделать расчет запаса в неделю, а затем отформатируйте Excel, но у меня есть одна проблема, мне нужно в объекте что-то вроде:

puclic class needsPerWeek 
{ 
string Article{get;set;} 
int needsWeek1{get;set;} 
int stockWeek1{get;set;} 
int needsWeek2{get;set;} 
int stockWeek2{get;set;} 
int needsWeek{get;set;} 
int stockWeek4{get;set;} 
int needsWeek6{get;set;} 
int stockWeek6{get;set;} 
int needsWeek16{get;set;} 
int stockWeek16{get;set;} 
int needsWeek25{get;set;} 
int stockWeek25{get;set;} 
int needsWeek50{get;set;} 
int stockWeek50{get;set;} 
.... 
.... 
} 

, но я не знаю, сколько недель я буду recibe.

Итак, могу ли я сделать это с помощью поворота? Или любым другим способом получить это?

+0

Вы хотите, чтобы список? или хотите показать это? –

+0

Что мне нужно, это экспортировать данные в файл Excel, но для этого я могу судить (мне это нравится) раньше мне нужен список, а затем построить Excel и загрузить данные из списка. – Ion

+0

Как 'неделя' связана с' Запасами'? –

ответ

1

Просто скопируйте и вставьте код ниже и внесите некоторые изменения в соответствии с вашими потребностями. Мы просто делаем динамические строки столбцов (UnitsWeek1, UnitsWeek2, NeedsWeek1 ... и т. Д.). И получите две таблицы, используя Pivot, и получите финальную таблицу, присоединив их.

DECLARE @cols1 AS NVARCHAR(MAX), 
    @query1 AS NVARCHAR(MAX), 
    @cols2 AS NVARCHAR(MAX), 
    @query2 AS NVARCHAR(MAX); 

select @cols1 = STUFF((SELECT distinct ',' + QUOTENAME('NeedsWeek'+Week) 
        from NeedsMaster FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query1 = 'SELECT Article, ' + @cols1 + ' from 
      (
       select Article 
         , Need 
         ,''NeedsWeek''+Week as Week 
         from 
        NeedsMaster 
      ) x 
      pivot 
      (
       min(need) 
       for Week in (' + @cols1 + ') 
      ) p ' 

select @cols2 = STUFF((SELECT distinct ',' + QUOTENAME('UnitsWeek'+n.Week) 
        from NeedsMaster n left join StocksMaster s 
on s.Article=n.Article 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query2 = 'Select * from (SELECT Article, ' + @cols2 + ' from 
      (
       select n.Article 
         , s.Units 
         ,''UnitsWeek''+n.Week as Week 

        from StocksMaster s 
        inner join NeedsMaster n 
         on s.Article=n.Article 
      ) x1 
      pivot 
      (
       min(Units) 
       for Week in (' + @cols2 + ') 
      ) p1) a inner join 
      (SELECT Article, ' + @cols1 + ' from 
      (
       select Article 

         , Need 
         ,''NeedsWeek''+Week as Week 
         from 
        NeedsMaster 
      ) x2 
      pivot 
      (
       min(need) 
       for Week in (' + @cols1 + ') 
      ) p2) b on a.Article=b.Article' 

execute(@query2) 

(@ query1 только для лучшего понимания цели). Дайте ему попробовать, и я надеюсь, вы отредактируете его как свои требования.

Reference

+0

Спасибо, отлично работает. Теперь я увижу, как извлечь в C# для выполнения тех же вычислений – Ion

Смежные вопросы