sql server - Can I create column with header name according to values in another table? -


this first question here , please excuse me, if question looks wired. totally new programming , sql though have knowledge in ms access database.

i have created 2 tables orderstabel , ordereditems. want create table orderfulldetails in screenshot here:

table picture

i want create orderfulldetails table follows.

  1. contains in item column in ordereditem table should create separate column in orderfulldetails table names.

  2. if column exists in orderfulldetails table equal item name in ordereditem table, qty value should entered matching column according orderno. , if there no column matching, should create new column.

your million worth me.

thanks

firstly welcome stack overflow. in asking question expected show how have attempted solve problem yourself. not pictures, , prefer given sample data, in format makes easy copy. please note not coding service. however, because first time, kind.

it goes against normal rules of relational database design build third table hold data held in other tables. should create stored procedure retrieve records both tables in format want. scsimon rightly says need pivot , dynamic sql in procedure.

by way of example give following:

create procedure orderexample   create table #orderstable( orderno int, orderdate date, customerid int, totalitems int, totalamount decimal(10,2) ) insert #orderstable values(101, '2016-8-11', 354, 3, 30) insert #orderstable values(102, '2016-8-12', 221, 2, 20) insert #orderstable values(103, '2016-8-13', 67, 1, 20) insert #orderstable values(104, '2016-8-14', 8965, 3, 40)  create table #ordereditems ( orderno int, orderitem varchar(10), orderqty int ) insert #ordereditems values(101, 't-shirt', 2) insert #ordereditems values(101, 'bedsheet', 1) insert #ordereditems values(102, 'pants', 2) insert #ordereditems values(103, 'quilt', 1) insert #ordereditems values(104, 't-shirt', 2) insert #ordereditems values(104, 'pants', 1)  declare @itemnames varchar(max) =  (select  stuff(( select distinct ',' + quotename(orderitem) #ordereditems xml path('')), 1, 1, '') collist)   declare @sql varchar(max) = 'select orderno, orderdate, customerid,  totalitems, totalamount,' + @itemnames + ' (select o.orderno, o.orderdate, o.customerid, o.totalitems, o.totalamount, i.orderitem, i.orderqty  #orderstable o inner join #ordereditems on i.orderno = o.orderno) subq pivot(sum(orderqty) orderitem in (' + @itemnames + ')) pvt'  exec (@sql)  drop table #orderstable drop table #ordereditems 

to run this, type: exec orderexample

the result

orderno orderdate   customerid  totalitems  totalamount bedsheet    pants   quilt   t-shirt 101     2016-08-11  354         3           30.00       1           null    null    2 102     2016-08-12  221         2           20.00       null        2       null    null 103     2016-08-13  67          1           20.00       null        null        1   null 104     2016-08-14  8965        3           40.00       null        1       null    2 

note in finished version not need lines create temporary tables, insert data , drop them again. instead must replace #orderstable , #ordereditems names of correct tables (and of course correct field names). have included them, example runs stand-alone.


Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

java - How to resolve The method toString() in the type Object is not applicable for the arguments (InputStream) -