2012-11-27 38 views
2

我有场景,用户输入的是一个月,产量销量当月,然后再接下来的12个月的销售也我写此查询动态别名在查询

select 
sum(decode(month ,to_char(add_months(to_date(&m,'mon'),0),'mon'), sales)) "&m" , 
sum(decode(month ,to_char(add_months(to_date(&m,'mon'),1),'mon'), sales)) "&m" , 
sum(decode(month ,to_char(add_months(to_date(&m,'mon'),2),'mon'), sales)) "&m" , 
sum(decode(month ,to_char(add_months(to_date(&m,'mon'),3),'mon'), sales)) "&m" , 
sum(decode(month ,to_char(add_months(to_date(&m,'mon'),4),'mon'), sales)) "&m" , 
sum(decode(month ,to_char(add_months(to_date(&m,'mon'),5),'mon'), sales)) "&m" , 
sum(decode(month ,to_char(add_months(to_date(&m,'mon'),6),'mon'), sales)) "&m" , 
sum(decode(month ,to_char(add_months(to_date(&m,'mon'),7),'mon'), sales)) "&m" , 
sum(decode(month ,to_char(add_months(to_date(&m,'mon'),8),'mon'), sales)) "&m" , 
sum(decode(month ,to_char(add_months(to_date(&m,'mon'),9),'mon'), sales)) "&m" , 
sum(decode(month ,to_char(add_months(to_date(&m,'mon'),10),'mon'), sales)) "&m" , 
sum(decode(month ,to_char(add_months(to_date(&m,'mon'),11),'mon'), sales)) "&m" , 
sum(decode(month ,to_char(add_months(to_date(&m,'mon'),12),'mon'), sales)) "&m" 
from sales 

m输入一个月的用户我想该别名也改变动态所以如何manipualte列别名任何帮助 感谢名单

回答

0

它看起来并不像你正在使用MS SQL,但是这可能有助于概念

通过以下AR的帮助Ticle:t-sql select get all Months within a range of years

DECLARE @StartDate DATETIME, 
     @EndDate DATETIME, 
     @Sql VARCHAR(max) 
SELECT @StartDate = '2012-01-01', 
     @EndDate = '2012-12-01', 
     @Sql = 'select' 

;WITH 
cteDates AS 
(
    SELECT TOP (DATEDIFF(mm,@StartDate,@EndDate) + 1) 
      MonthDate = DATEADD(mm,DATEDIFF(mm,0,@StartDate) + (ROW_NUMBER() OVER 
       (ORDER BY (SELECT NULL)) -1),0) 
    FROM sys.all_columns ac1 
    CROSS JOIN sys.all_columns ac2 
) 

SELECT @SQL = @Sql + ' 
sum(decode(month ,to_char(add_months(to_date(''' + DateName(month, MonthDate) + ''',''mon''),' + CAST(MONTH(MonthDate) AS VARCHAR) + '),''mon''), sales)) "' + DateName(month, MonthDate) + '" ,' 
FROM cteDates 


SELECT @Sql = SUBSTRING(@Sql, 0, LEN(@Sql) -1) + ' 
from sales' 
print @Sql 

EXEC(@Sql)