| Author |
Topic |
|
jggtz
Starting Member
32 Posts |
Posted - 2008-05-24 : 20:54:51
|
| How would be a query that read detailed sales from several dates and accumulated them in a table that has months as fieldsMSSQL 2005Table : DETAILCustomer_Date___________Value1________01-Jan-2008____1,234.002________01-Feb-2008____3,456.003________01-Mar-2008______500.004________01-Apr-2008____1,567.001________01-Apr-2008____2,123.00Table : TOTALYear__Customer_Jan______Feb______Mar_____Apr ...2008__1________1,234.00_0________0_______2,123.00 2008__2________0________3,456.00_0_______02008__3________0________0________500.00__02008__4________0________0________0_______1,567.00 Thanks for your helpJG |
|
|
pravin14u
Posting Yak Master
246 Posts |
Posted - 2008-05-25 : 00:50:48
|
| use PIVOT if you are using SQL 2005Prakash.PThe secret to creativity is knowing how to hide your sources! |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-05-25 : 00:59:44
|
SQL 2000INSERT INTO TOTALSELECT YEAR(Date),Customer,SUM(CASE WHEN MONTH(Date)=1 THEN Value ELSE 0 END ) AS Jan,SUM(CASE WHEN MONTH(Date)=2 THEN Value ELSE 0 END ) AS Feb,SUM(CASE WHEN MONTH(Date)=3 THEN Value ELSE 0 END ) AS Mar,SUM(CASE WHEN MONTH(Date)=4 THEN Value ELSE 0 END ) AS Apr,SUM(CASE WHEN MONTH(Date)=5 THEN Value ELSE 0 END ) AS May,SUM(CASE WHEN MONTH(Date)=6 THEN Value ELSE 0 END ) AS June,....SUM(CASE WHEN MONTH(Date)=12 THEN Value ELSE 0 END ) AS Dec,FROM DETAILGROUP BY YEAR(Date),Customer SQL 2005SELECT Year,Customer,SUM([1]),SUM([2]),SUM([3]),SUM([4]),SUM([5]),SUM([6]),SUM([7]),SUM( ),SUM([9]),SUM([10]),SUM([11]),SUM([12])FROM(SELECT YEAR(Date) AS [Year],MONTH(Date) AS [Month],Date,Customer,[Value] FROM DETAIL)mPIVOT(SUM(Value) FOR [Month] IN ([1],[2],[3],[4],[5],[6],[7], ,[9],[10],[11],[12]))pGROUP BY Year,Customer EDIT: Missed FROM & , |
 |
|
|
jggtz
Starting Member
32 Posts |
Posted - 2008-05-25 : 01:40:11
|
| Thank You very muchI'm learning in thinking sql after many years of traditional ADO methods |
 |
|
|
ranganath
Posting Yak Master
209 Posts |
Posted - 2008-05-26 : 01:01:18
|
| HiTry with this Declare @Temp Table (id int identity(1,1), CustomerId int, Date varchar(100), Val Varchar(100))Insert into @TempSelect 1,'01-Jan-2008','1,234.00' Union AllSelect 2,'01-Feb-2008','3,456.00 ' Union AllSelect 3,'01-Mar-2008','500.00' Union AllSelect 4,'01-Apr-2008','1,567.00' Union AllSelect 1,'01-Apr-2008','2,123.00' Union AllSelect 4,'01-May-2008','2,123.00' Union AllSelect 5,'01-June-2008','2,123.00' Union AllSelect 6,'01-june-2008','2,000.00' Select Id, CustomerId, Left(Replace(Date,Left(date,charIndex('-' , date)),''),charIndex('-' , Replace(date,Left(date,charIndex('-' , date)),''))-1) as Mon , Substring(Date, 8,4) as Yr, Val into #TempFrom @Temp --Select * From #TempDeclare @Sql Varchar(8000)Set @sql = ''DEclare @str Varchar(8000)Set @str = ''Select @Sql = @Sql + ', Min (Case when mon = ''' + mon + ''' then Val end ) AS "'+ Mon +'"'From (Select distinct Mon From #Temp )A--Select @SqlSelect @str = 'Select CustomerId,yr,val '+@Sql +' From #Temp Group By CustomerId,yr,val 'Exec(@str )Drop Table #Temp |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-05-26 : 02:21:39
|
quote: Originally posted by ranganath HiTry with this Declare @Temp Table (CustomerId int, Date varchar(100), Val Varchar(100))Insert into @TempSelect 1,'01-Jan-2008','1,234.00' Union AllSelect 2,'01-Feb-2008','3,456.00 ' Union AllSelect 3,'01-Mar-2008','500.00' Union AllSelect 4,'01-Apr-2008','1,567.00' Union AllSelect 1,'01-Apr-2008','2,123.00'Select CustomerId, Substring(Date, 4,3) as Mon , Substring(Date, 8,4) as Yr, Val into #TempFrom @TempSelect * From #TempDeclare @Sql Varchar(8000)Set @sql = ''DEclare @str Varchar(8000)Set @str = ''Select @Sql = @Sql + ', Min (Case when Cast(mon as varchar(100)) = ''' + Cast(mon as varchar(100)) + ''' then Val end ) AS "'+ Mon +'"'From (Select distinct Mon From #Temp)ASelect @SqlSelect @str = 'Select CustomerId,yr,val '+@Sql +' From #Temp Group By CustomerId,yr,val 'Exec(@str )Drop Table #Temp
Do you really need to use dynamic sql here? the columns are static always from Jan to Dec. |
 |
|
|
|
|
|