PDA

View Full Version : Merge کردن دو Query



ir_programmer
شنبه 15 دی 1386, 11:20 صبح
من 2 تا Query بشکل زیر دارم:

1-


select a1 as col1 , a2 as col2 from table1

2-


select b1 as col1 , b2 as col2 from table2


من میخام نتیجه این 2 Query رو یکجا نشون بدم.
یک روش اینه که هر دو رو در دو Dataset لود کنم و در دات نت DataSet ها رو Merge کنم.
اما من میخام اینکار رو تو اوراکل انجام بدم.
راه حلی سراغ دارین؟

ir_programmer
شنبه 15 دی 1386, 11:35 صبح
حتما جواب اینه:


select a1 as col1 , a2 as col2 from table1
union
select b1 as col1 , b2 as col2 from table2

اما برای Query اصلی من که همراه با Group By هست یکم گیر میده.
قوائد استفاده از Union توی Oracle چیه؟ برای Group By هم جواب میده؟

ir_programmer
شنبه 15 دی 1386, 11:44 صبح
این ساده شده Query منه:

SELECT TBLPHASE.PHASENAME, TBLBLDGN.BLDGNNAME, TBLBLDGN.ACTIVE, TBLBLDGNPROD.BLDGNPRODID, TBLPROD.PRODNAME,
TBLBLDGNPROD.PRODTYPE, TBLDAILYPRODUCTION.CURRENTDATE, TBLDAILYPRODUCTION.OPENNINGSTOCK,
TBLDAILYPRODUCTION.DAILYPRODUCTION, SUM(NVL(TBLDAILYPRODCONS.QTY, 0)) AS TOTCONSUMERQTY,
TBLDAILYPRODUCTION.CONSUMPTION, TBLDAILYPRODUCTION.PERT, TBLDAILYPRODUCTION.SALEDRUMS, TBLDAILYPRODUCTION.SALETANKER,
TBLDAILYPRODUCTION.CLOSINGSTOCK, 0 AS RECIEVEDQTY
FROM TBLDAILYPRODCONS INNER JOIN
TBLPROVCONS ON TBLDAILYPRODCONS.PROVCONSID = TBLPROVCONS.PROVCONSID RIGHT OUTER JOIN
TBLBLDGN INNER JOIN
TBLBLDGNPROD ON TBLBLDGN.BLDGNID = TBLBLDGNPROD.BLDGNID INNER JOIN
TBLPROD ON TBLBLDGNPROD.PRODID = TBLPROD.PRODID INNER JOIN
TBLPHASE ON TBLBLDGN.PHASEID = TBLPHASE.PHASEID LEFT OUTER JOIN
TBLDAILYPRODUCTION ON TBLBLDGNPROD.BLDGNPRODID = TBLDAILYPRODUCTION.BLDGNPRODID ON
TBLPROVCONS.PROVIDERID = TBLBLDGNPROD.BLDGNPRODID AND TBLPROVCONS.CONSUMERID = TBLBLDGNPROD.BLDGNPRODID
GROUP BY TBLPROD.PRODNAME, TBLBLDGNPROD.PRODTYPE, TBLDAILYPRODUCTION.CURRENTDATE, TBLDAILYPRODUCTION.OPENNINGSTOCK,
TBLBLDGN.BLDGNNAME, TBLBLDGN.ACTIVE, TBLPHASE.PHASENAME, TBLDAILYPRODUCTION.DAILYPRODUCTION,
TBLBLDGNPROD.BLDGNPRODID, TBLDAILYPRODUCTION.CONSUMPTION, TBLDAILYPRODUCTION.PERT, TBLDAILYPRODUCTION.SALEDRUMS,
TBLDAILYPRODUCTION.SALETANKER, TBLDAILYPRODUCTION.CLOSINGSTOCK

union

SELECT TBLPHASE.PHASENAME, TBLBLDGN.BLDGNNAME, TBLBLDGN.ACTIVE, TBLBLDGNPROD.BLDGNPRODID, TBLPROD.PRODNAME,
TBLBLDGNPROD.PRODTYPE, TBLDAILYFEED.CURRENTDATE, TBLDAILYFEED.OPENNINGSTOCK, TBLDAILYFEED.RECIEVEDQTY,
TBLDAILYFEED.CONSUMPTION, TBLDAILYFEED.CLOSINGSTOCK, TBLDAILYFEED.COMMENTS, TBLDAILYFEED.PERT, 0 AS DAILYPRODUCTION,
0 AS TOTCONSUMERQTY, 0 AS SALETANKER, 0 AS SALEDRUMS
FROM TBLDAILYFEED RIGHT OUTER JOIN
TBLBLDGN INNER JOIN
TBLBLDGNPROD ON TBLBLDGN.BLDGNID = TBLBLDGNPROD.BLDGNID INNER JOIN
TBLPROD ON TBLBLDGNPROD.PRODID = TBLPROD.PRODID INNER JOIN
TBLPHASE ON TBLBLDGN.PHASEID = TBLPHASE.PHASEID ON TBLDAILYFEED.BLDGNPRODID = TBLBLDGNPROD.BLDGNPRODID
GROUP BY TBLPROD.PRODNAME, TBLBLDGNPROD.PRODTYPE, TBLBLDGN.BLDGNNAME, TBLBLDGN.ACTIVE, TBLPHASE.PHASENAME,
TBLBLDGNPROD.BLDGNPRODID, TBLDAILYFEED.CURRENTDATE, TBLDAILYFEED.OPENNINGSTOCK, TBLDAILYFEED.RECIEVEDQTY,
TBLDAILYFEED.CONSUMPTION, TBLDAILYFEED.CLOSINGSTOCK, TBLDAILYFEED.COMMENTS, TBLDAILYFEED.PERT


کسی میدونه مشکلش چیه؟

ir_programmer
شنبه 15 دی 1386, 11:59 صبح
ظاهرا Union به ترتیب ستون ها حساسه.

hmm
یک شنبه 16 دی 1386, 07:57 صبح
1-دقیقاً نام و ترتیب فیلدهای دو Query و حتی Datatype اونها میبایست یکی باشه.
2-مشکلت حل شد یا نه ؟
3-اگه حل نشد پیغام خطا رو بنویس.

ir_programmer
یک شنبه 16 دی 1386, 10:06 صبح
-------------------
حل شده