PDA

View Full Version : جمع دو فیلد از دو جدول مجزا با کلیدی مشترک



yazdan
شنبه 14 خرداد 1384, 08:48 صبح
ین خلاصه شده دو جدول من است
با تحلیل های انجام شده به این نتیجه رسیده ام که این دو باید در دو جدول جداگانه باشند.

table1:
code(key(
vajhe_pardakhti

table2:
code(key(
vajhe_takhfif

اکنون گزارش جمع مبالغ را از دو جدول به همراه کد مربوطه می خواهم
sql:
code,sum(vajhe_pardakhti),sum(vajhe_takhfif)

sql مربوطه چیست ؟ من که هر چه نوشتم غلط از آب در اومد.

majid_afra222
شنبه 14 خرداد 1384, 09:05 صبح
سلام
یه دستور group by کم داره٬ عزیز جان
شاید هم دستور رو کامل ننوشتی؟؟؟؟؟؟

yazdan
شنبه 14 خرداد 1384, 09:27 صبح
دستور کامل من این است
جواب می ده ولی مقادیر رو اشتباه جمع می کنه

SELECT code,SUM( Naghd.Vajh ), SUM( Morajeat.Sahme_bimar )
FROM "morajeat.DB" Morajeat
INNER JOIN "naghd.db" Naghd
ON (Morajeat.Code = Naghd.Code)
group by code

yazdan
شنبه 14 خرداد 1384, 13:19 عصر
یکی پیدا نمی شه جوا ب منو بده

اصلا تحلیل می کنم تا یکم واضح تر بشه .
قبوض مشتریان سازمان آب رو می خواهیم طراحی کنیم . بطوری که میزان مصرف ماهیانه در یک جدول و مبالغ پرداختی مشتریان نیز در جدولی دیگر . ضمنا مشرکین می توانند هر قبض را طی چند سند پرداخت کنند .
مثلا قبض خرداد را با مبلغ 1000 طی 4 فیش 250 تومانی و در 4 تاریخ متفاوت پرداخت می شود.
پس یک جدول مشخصات مشترکین - یک جدول مشخصات مصارف ماهانه مشترکین - و جدول دیگر پرداختی های مشترکین خواهد بود .

حال می خواهیم گزارش مبلغ هر قبض + مبلغ پرداختی هر مشترک را در یک گزارش داشته باشیم .
چگونه؟

majid_afra222
شنبه 14 خرداد 1384, 15:40 عصر
سلام
این کد رو نگاه کن :


CREATE TABLE [dbo].[Table2] (
[id] [numeric](18, 0) NOT NULL ,
[gno] [numeric](18, 0) NOT NULL ,
[val] [numeric](18, 0) NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Table1] (
[id] [numeric](18, 0) NOT NULL ,
[name] [char] (10) COLLATE Arabic_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Table3] (
[id] [numeric](18, 0) NOT NULL ,
[gno] [numeric](18, 0) NOT NULL ,
[pno] [numeric](18, 0) NOT NULL ,
[val] [numeric](18, 0) NULL ,
[pday] [datetime] NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Table2] WITH NOCHECK ADD
CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
(
[id],
[gno]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Table1] WITH NOCHECK ADD
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Table3] WITH NOCHECK ADD
CONSTRAINT [PK_Table3] PRIMARY KEY CLUSTERED
(
[id],
[gno],
[pno]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Table2] ADD
CONSTRAINT [FK_Table2_Table1] FOREIGN KEY
(
[id]
) REFERENCES [dbo].[Table1] (
[id]
)
GO

ALTER TABLE [dbo].[Table3] ADD
CONSTRAINT [FK_Table3_Table2] FOREIGN KEY
(
[id],
[gno]
) REFERENCES [dbo].[Table2] (
[id],
[gno]
)
GO

insert into table1 values(1, 'ali')
insert into table1 values(2, 'reza')
insert into table1 values(3, 'yaser')
insert into table1 values(4, 'abbas')
GO

insert into table2 values(1,1, 1000)
insert into table2 values(1,2, 800)
insert into table2 values(2,1, 250)
insert into table2 values(3,1, 1000)
insert into table2 values(3,2, 300)
insert into table2 values(4,1, 1800)

GO
insert into table3 values(1, 1, 1, 100, 10/01/1998)
insert into table3 values(1, 1, 2, 10, 10/02/1998)
insert into table3 values(1, 1, 3, 50, 20/02/1998)
insert into table3 values(1, 1, 4, 320, 01/03/1998)
insert into table3 values(1, 2, 1, 700, 15/03/1998)
insert into table3 values(2, 1, 1, 250, 10/01/1998)
insert into table3 values(3, 1, 1, 100, 01/01/1998)
insert into table3 values(3, 1, 2, 900, 18/02/1998)
insert into table3 values(3, 2, 1, 150, 10/03/1998)

GO
select * from table1
select * from table2
select * from table3
GO

select
(select t1.name
from table1 t1
where t1.id = t2.id) as [نام مشتری]
, t2.gno as [شماره قبض]
, t2.val as [کل مبلغ قبض]
,(select sum(t3.val)
from table3 t3
where t3.id = t2.id and t3.gno = t2.gno) as [کل مبلغ پرداختی از قبض]
from table2 t2
group by id, gno, val

بهتر بود ساختار جدول و نتیجه درخواستیت رو می نوشتی٬‌شاید جواب بهتری دریافت می کردی.

دنیای دلفی
شنبه 14 خرداد 1384, 17:05 عصر
:flower: :تشویق:

yazdan
یک شنبه 15 خرداد 1384, 06:02 صبح
ساختار 3 جدول مورد نیاز بدین ترتیب می باشد؛:


SELECT Code, Id_personeli, Sh_daftarche, Name, Family, Id_b, Id_p, Tel, Vajhe_takhfif
FROM "bimar.DB" Bimar

SELECT Code, Martabe, T_morajee, Nomre, Sharh, Id_m, Sahme_sazman, Sahme_bimar
FROM "morajeat.DB" Morajeat

SELECT Code, T_pardakht, Vajh, Noe_pardakht, Tasviye, Touzih
FROM "naghd.db" Naghd


من با BDE , پارادکس کارمی کنم .

خروجی که نیاز دارم بشکل زی می باشد:

code , Vajhe_takhfif , sum(Sahme_sazman) , sum(Sahme_bimar) , sum(Vajh)

امیدوارم توضیحات کافی باشد.
ضمنا من در محیط sql builder دستورات را اجرا می کنم و وقتی جواب گرفتم درون برنامه اضافه می کنم . اگه اشتباه است تذکر بدید.
با تشکر از لطف دوستان

majid_afra222
یک شنبه 15 خرداد 1384, 14:48 عصر
سلام yazdan عزیز
متاسفانه ساختار جداول اشتباه است٬‌باید کلیدهای خارجی مورد نیاز برای ارتباط جداول بصورت ساختار پدر فرزندی (یک به چند) رو در جداولت اعمال کنی٬‌تا بتونی جواب دلخواه رو بگیری (مثل چیزی که من برات فرستادم). در ساختار طراحی شده توسط شما٬‌هیچ ارتباطی بین پرداختها و قبضها وجود ندارد.
اگه ساختار جداول رو یه کمی تغییر بدی و به هر جدول کلیدهای خارجی مورد نیاز رو اضافه کنی درست میشه.
1- جدول "bimar.DB" دارای کلید اصلی Code می باشد.
2- جدول "morajeat.DB" باید دارای کلید اصلی ترکیبی Code (کلید خارجی از جدول "bimar.DB")‌و فیلد جدیدی مثل morajeat_no باشد.
3- جدوا آخر "naghd.db" باید دارای کلید اصلی ترکیبی٬‌شامل کلید های اصلی جدول "morajeat.DB" (Code و morajeat_no) و فیلد جدیدی مثل naghd_no باشد.
در صورتیکه ساختار جداول درست باشه٬ میتونی با یه پرس و جوی ساده تمام اطلاعات مورد نیازت رو بدست بیاری.
ساختار جداول رو بدون نیاز به برنامه نویسی زیادی میتونی تغییر بدی٬‌فقط یه فیلد جدید به جداول اضافه میکنی٬کد پرس و جوی ارسالی بالا هم٬ همون کدی هستش که می خوای یعنی دقیقا خود اونه .

امیدوارم بدردت بخوره و بتونی مشکلت رو حل بکنی