PDA

View Full Version : مشکل در نوشتن query



tempali
شنبه 22 مرداد 1390, 14:35 عصر
سلام.
من قبلا تو اکسس این کوئری رو نوشتم و خوب کار می کرده ولی در اس کیو ال جواب نمیده لطفا راهنمایی کنید.

من داخل 2 جدول اطلاعات پرداخت و دریافت از هر مشتری رو ذخیره می کنم مثلا:
=============
پرداخت
1- علی 50
2- حسن 100
3- اکبر 80
=============
دریافت
1- علی 10
2- حسن 60
=============
جدول مورد نظر (باقیمانده)
1- علی 50 10 40
2- حسن 100 60 40
3- اکبر 80 0 80

مشکل من با اکبر هست که در خروجی بعلت نبودن در جودل دریافت ها نشون داده نمیشه.
تو اکسس با استفاده از iif و isnull درست کار می کنه ولی در sql جواب نمیده.

Galawij
شنبه 22 مرداد 1390, 18:11 عصر
سلام،
مشکل از تابع ISNULL نیست. مشکل از ارتباط بین جداول شماست. سعی کنید از LEFT OUTER JOIN , RIGHT OUTER JOIN استفاده کنید.
حل نشد، جداول را بذارید.

یوسف زالی
شنبه 22 مرداد 1390, 18:12 عصر
سلام.
به جای join از full join استفاده کنید و به جای جمع فیلد ها از جمع isnull و صفر اونها استفاده کنید.

tempali
یک شنبه 23 مرداد 1390, 09:38 صبح
سلام
با تشکر از بذل توجه دوستان
مشکل همچنان باقیست
من ساختار دیتابیس و عکس ها رو قرار می دم انشاا... حل بشه(مشکل) !


CREATE TABLE [dbo].[tblPardakht] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[mosh_ID] [int] NOT NULL ,
[Pardakht] [bigint] NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[tblDaryaft] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[mosh_id] [int] NOT NULL ,
[Daryaft] [bigint] NOT NULL
) ON [PRIMARY]
GO




CREATE TABLE [dbo].[tblMosh] (
[id] [int] NOT NULL ,
[Mosh_Name] [varchar] (50) COLLATE Arabic_CI_AS NOT NULL ,
[telephone] [varchar] (50) COLLATE Arabic_CI_AS NULL ,
[Address] [varchar] (250) COLLATE Arabic_CI_AS NULL
) ON [PRIMARY]
GO

SELECT dbo.tblMosh.Mosh_Name, SUM(dbo.tblPardakht.Pardakht) AS pardakht, SUM(dbo.tblDaryaft.Daryaft) AS daryaft, SUM(dbo.tblPardakht.Pardakht)
- SUM(dbo.tblDaryaft.Daryaft) AS Total
FROM dbo.tblDaryaft RIGHT OUTER JOIN
dbo.tblMosh ON dbo.tblDaryaft.mosh_id = dbo.tblMosh.id INNER JOIN
dbo.tblPardakht ON dbo.tblMosh.id = dbo.tblPardakht.mosh_ID
GROUP BY dbo.tblMosh.Mosh_Name
GO

73776737777377873779

Galawij
یک شنبه 23 مرداد 1390, 10:38 صبح
SELECT dbo.tblMosh.Mosh_Name, SUM(ISNULL(dbo.tblPardakht.Pardakht, 0)) AS pardakht, SUM(ISNULL(dbo.tblDaryaft.Daryaft, 0)) AS daryaft,
SUM(ISNULL(dbo.tblPardakht.Pardakht, 0) - ISNULL(dbo.tblDaryaft.Daryaft, 0)) AS Total
FROM dbo.tblPardakht RIGHT OUTER JOIN
dbo.tblMosh ON dbo.tblPardakht.mosh_ID = dbo.tblMosh.id LEFT OUTER JOIN
dbo.tblDaryaft ON dbo.tblMosh.id = dbo.tblDaryaft.mosh_id
group by dbo.tblMosh.Mosh_Name

دستور بالا کار می کنه. ولی یک مشکلی داره؟؟؟(پیدا کردنش به عهده خودتان)
برای رفع مشکل هم حتماً از فیلدی مثل تاریخ برای شرط Where استفاده کنید.

tempali
یک شنبه 23 مرداد 1390, 13:31 عصر
متشکر
مشکل حل شد.