PDA

View Full Version : دستور select چندگانه و چند ستون



mhamedm2008
جمعه 08 بهمن 1395, 17:18 عصر
با سلام
اول عذر خواهی کنم به خاطر اینکه موضوع خوبی نتونستم برای تاپیک انتخاب کنم.
من یک دستور select نوشتم. یک قسمت اون درست کار میکنه ولی قسمت دیگه عملکرد نامناسبی داره


SELECT SUM(sanad_master.bed) AS bed1, SUM(sanad_master.bes) AS bes1, hesab_group.group_kod, sanad_master.sal,
(select SUM(sanad_master.bes) FROM hesab_group LEFT OUTER JOIN sanad_master ON hesab_group.group_kod = sanad_master.group_hesab where sanad_master.tarikh between '950101' and '950631' ) as bed2,
(select SUM(sanad_master.bes) FROM hesab_group LEFT OUTER JOIN sanad_master ON hesab_group.group_kod = sanad_master.group_hesab where sanad_master.tarikh between '950101' and '950631' ) as bes2,
(select SUM(sanad_master.bes) FROM hesab_group LEFT OUTER JOIN sanad_master ON hesab_group.group_kod = sanad_master.group_hesab where sanad_master.tarikh between '950631' and '951231' ) as bed3,
(select SUM(sanad_master.bes) FROM hesab_group LEFT OUTER JOIN sanad_master ON hesab_group.group_kod = sanad_master.group_hesab where sanad_master.tarikh between '950631' and '951231' ) as bes4
FROM hesab_group LEFT OUTER JOIN
sanad_master ON hesab_group.group_kod = sanad_master.group_hesab
GROUP BY hesab_group.group_kod, sanad_master.sal
HAVING (NOT (SUM(sanad_master.bed) IS NULL)) AND (NOT (SUM(sanad_master.bes) IS NULL)) AND (sanad_master.sal = 95)

همانطور که مشاهده می کنید این دستور 6 ستون بستانکار و بدهکار با نام های bes1 bes2 bes3 و bed1 bed2 bed3 ایجاد میکنه که با جدول حساب های جوین شده است.
مطابق شکل زیر، ستون bed1 و bed 2 به درستی عمل می کنه و حساب هایی که گردش دارند را جمع می بنده و نشون میده
حالا مشکل من توی ستون های دوم و سوم هست که باید جمع رو توی یک بازه زمانی خاص حساب کنه.
به خاطر اینکه برخی از حساب ها گردش ندارند و باید جمع ستون و خالی و یا null بزاره. در صورتی که توی کل ردیف ها جمع رو نمایش میده.
خودم میدم مشکل از دستور select های تو در توی من هست. ولی نمی دونم چه جوری باید اصلاح کنم که حساب هایی که توی اون بازه زمانی گردشی ندارند و باید null بزنه ولی میاد توی ردیف ها چاپ می کنه
با تشکر

144323

حمیدرضاصادقیان
دوشنبه 18 بهمن 1395, 19:50 عصر
سلام
اولا بهتون پیشنهاد می کنم از Window Function ها استفاده کنید به جای Subquery .
دوم اینکه الان شما در هر 4 تا سلکت اومدین جمع فیلد Bes رو نوشتید.
سوم اینکه خود سلکتی که نوشتید رو جداگانه اجراش کنید و ببینید مقادیر درست میده و سعی کنید مقادیر Null رو با تابع Coalesce هندل کنید و به جاش صفر قراربدین.