PDA

View Full Version : تلفیق دو جدول و نمایش اطلاعات جدول دوم در سطر های جدول اول



H.omidvar
چهارشنبه 02 اردیبهشت 1394, 09:37 صبح
id

name

family



1

ali

omidvar



2

reza

hasani








id

paymentname

price



1

vam1

1000



1

vam2

2000



1

vam3

3000



2

vam6

5000




دو جدول فوق را داریم می خواهیم پس از join به این نتیجه برسم



id

name

family

p1

p_price1

p2

p_price2

p3

p_price3

p4

p_price4



1

ali

omidvar

vam1

1000

vam2

2000

vam3

3000

null

null



2

reza

hasani

null

null

null

null

null

null

vam6

5000




خواهشمند است راهنمایی کنید چه دستوری بنویسم-تشکر

مهرداد صفا
پنج شنبه 03 اردیبهشت 1394, 04:08 صبح
سلام.
اول اینکه برای هر payment نیاز به دو ستون نیست، بلکه باید مثلا یک ستون داشته باشید به نام 'vam1' و مقدار آن مثلا 1000 یا همان price باشد و برای این کار هم باید از pivot query استفاده کنید.
این کد رو تست کنید و به این صورت عمل کنید:


--بسم الله الرحمن الرحیم
--اللهم صل علی محمد و آل محمد

Create table person (ID int Identity,Name VarChar(10),Family VarChar(20));
insert into person values
('ali','omidvar'),
('reza','hasani');



Create table Payments (PersonID int not null,PaymentName VarChar(10),Price int);

insert into payments values
(1,'vam1',1000),
(1,'vam2',2000)
,(1,'vam3',5000)
,(2,'vam6',5000);

--برای حالت داینامیک خطوط کامنت شده را آنکامنت کنید.
--declare @vamTypes VarChar(max);
--select @vamTypes+=',' + PaymentName from Payments;
--set @VamTypes=stuff(@vamtypes,1,1,'');
--declare @sql VarChar(max);
--set @sql='
select * from

(select p.ID,p.Name,P.family,PY.PaymentName as n,PY.Price as pp
from person P
join Payments PY
on P.ID =PY.PersonID
) source
Pivot
(max(PP) for N in (
--' + @vamTypes + '
vam1,vam2,vam3,vam6--برای حالت داینامیک این خط را کامنت کنید.
)) pivotTable;
--';
-- execute (@sql);



خروجی شبیه به این خواهد بود:

ID/Name/Family/Vam1/Vam2/Vam3/vam6
1/ali/omidi/1000/2000/5000/null
...

برای اینکه ستون ها به صورت داینامیک تغییر کنند و مثلا اگر vam5 هم داشتیم خود به خود به نتیجه اضافه بشه کافیه تا خطوط کامنت شده رو آنکامنت کنید و یک خط از کد رو که مشخص کردم نیز کامنت کنید تا نتیجه به صورت پویا نمایش داده بشه.