2015-03-12 3 views
3

Мне нужно добавить вычисленный элемент столбца в том же столбце. Пожалуйста, см. Мой код SQL для существующих данных и желаемого результата.Добавить расчетные элементы - SQL Server 2008R2

О Продукт добавлен в соответствии с:

  • для +201501 продукта O = сумма en_count для продукта Y, W, N, когда yrmnth = 201501
  • для 201502 продукта O = сумма суммы en_count для продукта Y , З, Ы, когда yrmnth = 20150

Благодаря,

Хелал

SQL:

--Existing Data            
--===== If the test table already exists, drop it    
IF OBJECT_ID('TempDB..#Table1') IS NOT NULL DROP TABLE #Table1 

--===== Create the test table with        
CREATE TABLE #Table1 
(             
    product char(100),       
    yrmnth varchar(6),       
    en_count int,         
    date date,         
)             

INSERT INTO #Table1 (product, yrmnth, en_count, date)     
    SELECT 'Y', '201501', 5000 , '01/01/2015' union all 
    SELECT 'Y', '201502', 6000 , '02/01/2015' union all 
    SELECT 'Z', '201501', 7000 , '01/01/2015' union all 
    SELECT 'Z', '201502', 8000 , '02/01/2015' union all 
    SELECT 'W', '201501', 9000 , '01/01/2015' union all   
    SELECT 'W', '201502', 10000 , '02/01/2015' union all   
    SELECT 'N', '201501', 11000 , '01/01/2015' union all   
    SELECT 'N', '201502', 12000 , '02/01/2015'     

--Desired Outcome            
IF OBJECT_ID('TempDB..#Table2') IS NOT NULL DROP TABLE #Table2 

--===== Create the test table with        
CREATE TABLE #Table2           
(             
    product char(100),       
    yrmnth varchar(6),       
    en_count int,         
    date date,         
)             

INSERT INTO #Table2 (product, yrmnth, en_count, date)     
    SELECT 'Y', '201501', 5000 , '01/01/2015' union all   
    SELECT 'Y', '201502', 6000 , '02/01/2015' union all   
    SELECT 'Z', '201501', 7000 , '01/01/2015' union all   
    SELECT 'Z', '201502', 8000 , '02/01/2015' union all   
    SELECT 'W', '201501', 9000 , '01/01/2015' union all   
    SELECT 'W', '201502', 10000 , '02/01/2015' union all   
    SELECT 'N', '201501', 11000 , '01/01/2015' union all   
    SELECT 'N', '201502', 12000 , '02/01/2015' union all   
    SELECT 'O', '201501', 32000 , '01/01/2015' union all   
    SELECT 'O', '201502', 36000 , '02/01/2015'      

select *              
from #Table2 
+0

Очень хорошо сформированный вопрос – sqluser

+0

У вас была возможность попробовать свой ответ? – jpw

ответ

2

Это выглядит как простой insert ... select ... заявление:

insert #Table1 (product, yrmnth, en_count,date) 
select 'O', yrmnth, SUM(en_count), date 
from #Table1 
group by yrmnth, date 

Я предполагаю, что вы имели в виду, чтобы подвести все продукты (Y, Z, W, N), а не только (Y, W, N), поскольку первая дает указанную сумму, а последняя отличается (с отсутствующим значением N). Если это не было недосмотром, тогда добавьте where product in ('Y','W','N') после предложения from.

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