PDA

View Full Version : اشکال در کوئری مذکور برای لیست بدهکاران ؟



valentine093
پنج شنبه 28 فروردین 1393, 18:30 عصر
با سلام خدمت اساتید.من یک جدول پرداخت اقسط دارم که فیلدهاش شماره فاکتور،تاریخ پرداخت قسط،مقدار پرداختی و میزان بدهی بعد از پرداخت هر قسط است من برای پیدا کردن لیست بدهکا ران با استفاده از self_join کردن این جدول آخرین بدهی هر شخص رو بدست میاورم که کدش




select t1.*
from tbl_tick_pay t1
inner join
tbl_tick_pay t2
on t1.invoice_code=t2.invoice_code and
t1.pay_date>t2.pay_date




که خرجی اش درست است ولی مشکل من اینجاست که اگر شخصی یکبار قسط خود را پرداخت کند یعنی فقط یک سطر برای وی در جدول باشد این کد آنرا نمی آورد،به خاطر وجود فیلدهایی با نوع nvarchar ، استفاده از group , having اخطار میدهد،بدلیل کمبود وقت امکان تغییر پایگاه داده نیست.ممنون میشم راهنمایی کنین.

Rejnev
پنج شنبه 28 فروردین 1393, 19:08 عصر
با ویوو یا with کارتون راه میفته:
(دستور with توی sql 2000 ساپورت نمیشه)

with tblWith as
(
select
customer_code , max(invoce_code) as [id]
from
tbl_tick_pay
group by
cutomer_code
)
select
c.Name, t.mandehBedehkar
from
customer c,
tblWith w,
tbl_tick_pay t
where
c.code=t.customer_code and
t.invoice_code= w.id

توی دستور with بالا گفتم که لیست مشتری ها به همراه آخرین پرداختشون تحت عنوان tblWith لیست بشن.
بعد این سلکت رو با جدول اصلی و جدول مشتریان جوین کردم تا اسم و مانده و ... نمایش داده بشن.

valentine093
پنج شنبه 28 فروردین 1393, 23:23 عصر
با ویوو یا with کارتون راه میفته:
(دستور with توی sql 2000 ساپورت نمیشه)

with tblWith as
(
select
customer_code , max(invoce_code) as [id]
from
tbl_tick_pay
group by
cutomer_code
)
select
c.Name, t.mandehBedehkar
from
customer c,
tblWith w,
tbl_tick_pay t
where
c.code=t.customer_code and
t.invoice_code= w.id

توی دستور with بالا گفتم که لیست مشتری ها به همراه آخرین پرداختشون تحت عنوان tblWith لیست بشن.
بعد این سلکت رو با جدول اصلی و جدول مشتریان جوین کردم تا اسم و مانده و ... نمایش داده بشن.

ممنون مهندس-ولی فیلدهای جدول tbl_tick_pay بالا ذکر کردم فرق میکنه من تو این جدول شماره فاکتور ومبلغ و تاریخ پرداخت ومیزان بدهی است من تو with باید بتونم آخرین تاریخ پرداخت رو بدست بیارم نه بزرگترین شماره فاکتور رو که به خاطر nvarبودن تاریخ اخطار میده!!
شنبه باید تحویل بدم راهنمایی کنین ممنون میشم.اگر من بتونم آخرین پرداخت قسطهایی که بیش از یک بارپرداخت شده رو به همراه قسطهایی که فقط یکبار پرداخت شدند رو باهم بیارم مشکلم حل میشه؟جداگانه مشکلی نداره ولی باید باهم باشند که نمیشه؟

Rejnev
جمعه 29 فروردین 1393, 00:55 صبح
وقتی شماره آخرین دریافت رو که کلید هست داشته باشین به راحتی به بقیه فیلدها میتونید دسترسی داشته باشین.
شما با شکل بگین لیست جداول مربوطه چیا هستن و چه خروجی ای میخواین تا کوئری رو براتون بنویسم.
توی کوئری بالا اگه تاریخ رو هم میخواین به سلکت پایینی اضافه ش کنید:

with tblWith as
(
select
customer_code , max(invoce_code) as [id]
from
tbl_tick_pay
group by
cutomer_code
)
select
c.Name, t.TarikhVariz, t.mandehBedehkar -- ,...
from
customer c,
tblWith w,
tbl_tick_pay t
where
c.code=t.customer_code and
t.invoice_code= w.id

valentine093
جمعه 29 فروردین 1393, 10:10 صبح
وقتی شماره آخرین دریافت رو که کلید هست داشته باشین به راحتی به بقیه فیلدها میتونید دسترسی داشته باشین.
شما با شکل بگین لیست جداول مربوطه چیا هستن و چه خروجی ای میخواین تا کوئری رو براتون بنویسم.
توی کوئری بالا اگه تاریخ رو هم میخواین به سلکت پایینی اضافه ش کنید:

with tblWith as
(
select
customer_code , max(invoce_code) as [id]
from
tbl_tick_pay
group by
cutomer_code
)
select
c.Name, t.TarikhVariz, t.mandehBedehkar -- ,...
from
customer c,
tblWith w,
tbl_tick_pay t
where
c.code=t.customer_code and
t.invoice_code= w.id

شرمنده مهندس حسابی زحمت دادم.
من عکس جدواولم رو فرستادم اگه تو این جداول من بتونم از جدول tbl_tick_pay شماره فاکتور آخرین پرداختی رو برای فاکتورهایی که چند بار قسط پرداخت شده و شماره فاکتوری که فقط یکبار قسط پرداخت شده رو با هم بیارم مشکلم حله.خروجی جدول رو هم آوردم و رکوردهایی که علامت زدم رو باید تو کوئری نشون بدم که نمیتونم.اگه طراحی جدولم اشتباهه شرمنده دیگه وقت نداشتم عوضش کنم.راهنمایی کنین لطف بزرگی در حقم کردین.در ضمن این جدول من هیچ کلیدی نداره118113
118114

valentine093
جمعه 29 فروردین 1393, 18:44 عصر
یعنی اینقدر مشکله من سخته؟؟؟؟کسی نیست؟؟؟:افسرده: