PDA

View Full Version : جوین 4 جدول به طوریکه ستون های هم نام در یک ستون باشد



farzadkamali
جمعه 10 مرداد 1393, 00:36 صبح
با سلام خدمت دوستان و اساتید محترم
سوال مشخصه.
4 تا جدول به صورت زیر دارم:

members(membercode,membername
ghest(ghestID,membercode,mablagheghest,tedateghest ,mablaghepardakhti,date,loanId
mahianeh(mahianehID,membercode,mablaghepardakhti,d ate
bardashti(bardashtiID,membercode,mablaghedaryafti, date


که جداول (اقساط،ماهانه و برداشت) جدول دریافت و پرداخت صندوق رو تشکیل میدن.
می خوام این 4 جدول رو با هم جوین کنم به طوری که ستون های هم نام در یک ستون ادغام بشن مثلاً هر سه جدول ماهیانه،اقساط و برداشت فیلد تاریخ رو دارن. نمی خوام وقتی جوین کنم سه تا ستون به نام های mahianeh.date و mahianeh.date و bardashti.date داشته باشم. بلکه می خوام هرسه در یک ستون به نام date قرار بگیره. همین طور ستون mablaghepardakhti که در جدول mahianeh و ghest مشترکه.
یعنی وقتی این 4 جدول جوین میشه جدولی مثل شکل زیر رو تشکیل بده.
نکته: در شکل زیر من سه جدول ghest , mahianeh , bardashti رو تبدیل به یک جدول به نام payment کردم. یعنی سه جدول رو ندارم و به جاش هر سه در یک جدول به نام payment ادغام شدن. ولی خب این روش استانداردی نیست و قاعدتاً باید سه جدول جداگانه باشه.
در کل من از جوین این 4 جدول جدولی به شکل زیر رو در خروجی می خوام.انواع دستورات رو تست کردم ولی نشد. ممنون می شم راهنمایی کنین
121791

farzadkamali
یک شنبه 12 مرداد 1393, 09:58 صبح
هم اکنون نیازمند یاری سبزتان هستیم. از اساتید sql کسی نبود راهنمایی کنه؟

Salah Sanjabian
سه شنبه 14 مرداد 1393, 01:36 صبح
سلام میتونی اینو تست کنی ، برای جدولی که انجام نشده مطابق نمونه میتونی کار کنی

DECLARE @members TABLE (membercode int ,membername nvarchar (100))
DECLARE @ghest TABLE(ghestID int ,membercode int ,mablagheghest money ,tedateghest int ,mablaghepardakhti money,date date,loanId int )
DECLARE @mahianeh TABLE (mahianehID INT ,membercode INT ,mablaghepardakhti INT ,date DATE)
DECLARE @bardashti TABLE (bardashtiID INT ,membercode INT ,mablaghedaryafti money, date DATE)
INSERT INTO @members
( membercode, membername )
VALUES ( 0, -- membercode - int
N'Ali' -- membername - nvarchar(100)
) , (1,'Reza')
INSERT INTO @bardashti
( bardashtiID ,
membercode ,
mablaghedaryafti ,
date
)
VALUES ( 0 , -- bardashtiID - int
0 , -- membercode - int
1000 , -- mablaghedaryafti - money
'2014-08-04 21:35:29' -- date - date
)
INSERT INTO @ghest
( ghestID ,
membercode ,
mablagheghest ,
tedateghest ,
mablaghepardakhti ,
date ,
loanId
)
VALUES ( 0 , -- ghestID - int
1, -- membercode - int
3000, -- mablagheghest - money
2 , -- tedateghest - int
1500 , -- mablaghepardakhti - money
'2014-08-04 21:35:57' , -- date - date
0 -- loanId - int
)




;
WITH MyCte (MemberCode, NAME , PayType , GhestCount, PayAmount , ReciveAmount , Date , LoanId)
AS
(
SELECT g.membercode , m.membername , N'قسط' , g.tedateghest , g.mablaghepardakhti , 0 , g.date , g.loanId
FROM @ghest g
INNER JOIN @members m ON g.membercode = m.membercode


UNION ALL

SELECT b.membercode , m.membername , N'برداشت' , 0 , 0 , mablaghedaryafti , b.date, NULL
FROM @bardashti b
INNER JOIN @members m ON b.membercode = m.membercode
)
SELECT * FROM MyCte