2012-11-27 47 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)