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:
i want create orderfulldetails
table follows.
contains in
item
column inordereditem
table should create separate column inorderfulldetails
table names.if column exists in
orderfulldetails
table equal item name inordereditem
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
Post a Comment