Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here is how I would do that:</p> <pre><code>/* create table ##order ( ID int, ProdID int, Quantity int, [Date] date, CustID int, StoreID int ); insert into ##order values (1,1,5,'2011-01-10' ,12,1), (2,2,10,'2011-03-10',4 ,1), (3,3,8,'2011-03-10' ,5 ,1), (4,4,11,'2011-05-10',4 ,2), (5,5,5,'2011-05-10' ,14,2), (6,6,8,'2011-06-10' ,3 ,3); create table ##product (ProdID int, ProdName varchar(64), ProdDesc varchar(255), ProdType int); insert into ##product values (1,'Bananas','Chiquita',1), (2,'Apples','Green Apples',1), (3,'Grapes','Green Grapes',1), (4,'Potatoes','Idaho potatoes',2), (5,'Brocolli','Green Brocolli',2), (6,'Plates','Paper Plates',3); create table ##ProdType (TypeID int, Name varchar(64), [Desc] varchar(255)); insert into ##ProdType values (1,'Fruits','Fresh Fruits'),(2,'Vegetables','Fresh Veggies'),(3,'Kitchen','Kitchen stuff'); create table ##loc (loc_id int, city varchar(50), [state] varchar(50)) insert into ##loc values(1, 'Atlanta','GA'), (2, 'New york', 'NY'), (3, 'Chicago', 'IL'); */ declare @cmd varchar(max), @columns varchar(max) set @columns = '' select @columns = @columns + '['+Name+'],' from ##ProdType order by name asc select @columns = substring(@columns, 0, len(@columns)) set @cmd = ' select city, date,'+@columns+' from ( select ct.city, ord.Date, pt.Name, ord.Quantity from ##order ord join ##product pr on ord.ProdID = pr.ProdID join ##ProdType pt on pr.ProdType = pt.TypeID join ##loc ct on ord.StoreID = ct.loc_id )date_to_pivot PIVOT ( SUM(Quantity) for Name in ('+@columns+') )PIVOTED_DATA' exec (@cmd) </code></pre> <p>Here is the extension using the case statements:</p> <pre><code>set @columns = '' select @columns = '' select @columns = @columns + 'sum(case when pt.Name = '''+Name+''' then ord.Quantity else 0 end) as '+Name+'_SUM,' from ##ProdType order by name asc select @columns = @columns + 'count(case when pt.Name = '''+Name+''' then ord.Quantity else 0 end) as '+Name+'_COUNT,' from ##ProdType order by name asc select @columns = substring(@columns, 0, len(@columns)) set @cmd = ' select ct.city, ord.Date, ' +@columns+ ' from ##order ord join ##product pr on ord.ProdID = pr.ProdID join ##ProdType pt on pr.ProdType = pt.TypeID join ##loc ct on ord.StoreID = ct.loc_id group by ct.city, ord.Date' exec (@cmd) </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload