H L [EMAIL PROTECTED] wrote on 04/02/2006 11:51:48 AM:
Hi, i have a problem to select sum from same table using UNION. The
key
question is there a way of combining two questions in one so the
resulting
objectid in query1 is only used in query 2 in a smart way. Eg. if only
one
object is avaliable in a search first year then only check that objectid
for
next year and append the sum in the question.
I have 4 tables
companyobjects that contains the key (companyid,objectid,name etc)
and i have
calendar the table looks similar to this
(objectid,year,day1,day2.day365)
price that looks similar to this (objectid,year,day1,day2.day365)
reservation that looks similar to this
(objectid,year,day1,day2.day365)
I have tried as follows below, as you can see i want to calculate price
discount and amount to pay from same table but from 2 years. I have
tried
removed all my where clause below and the result is not correct it is
not
from both querys.
Maybe you know an easier way, totaly diffrent way that i have not
thought of
perhaps.
Thanks in advance /Henrik
SELECT
`companyobjects`.`objectid`,
Sum(`objectprice`.`d362` +`objectprice`.`d363`
+`objectprice`.`d364`+`objectprice`.`d365`),
Sum((`objectprice`.`d362` +`objectprice`.`d363`
+`objectprice`.`d364`+`objectprice`.`d365`)*0.1),
Sum((`objectprice`.`d362` +`objectprice`.`d363`
+`objectprice`.`d364`+`objectprice`.`d365`)*0.9)
FROM
`companyobjects`
Inner Join `objectprice` ON `companyobjects`.`objectid` =
`objectprice`.`objectid`
Inner Join `objectreservation` ON `companyobjects`.`objectid` =
`objectreservation`.`objectid`
Inner Join `objectcalendar` ON `companyobjects`.`objectid` =
`objectcalendar`.`objectid`
WHERE
`companyobjects`.`companyid` = 'C050319112022656' AND
`companyobjects`.`maxnrofguests` = '1' AND
`objectprice`.`year` = '2006' AND
`objectreservation`.`year` = '2006' AND
`objectcalendar`.`year` = '2006'
GROUP BY
`companyobjects`.`objectid`
UNION ALL
SELECT
`companyobjects`.`objectid`,
Sum(`objectprice`.`d1` +`objectprice`.`d2`),
Sum((`objectprice`.`d1` +`objectprice`.`d2`)*0.1),
Sum((`objectprice`.`d1` +`objectprice`.`d2`)*0.9)
FROM
`companyobjects`
Inner Join `objectprice` ON `companyobjects`.`objectid` =
`objectprice`.`objectid`
Inner Join `objectreservation` ON `companyobjects`.`objectid` =
`objectreservation`.`objectid`
Inner Join `objectcalendar` ON `companyobjects`.`objectid` =
`objectcalendar`.`objectid`
WHERE
`companyobjects`.`companyid` = 'C050319112022656' AND
`companyobjects`.`maxnrofguests` = '1' AND
`objectprice`.`year` = '2007' AND
`objectreservation`.`year` = '2007' AND
`objectcalendar`.`year` = '2007'
GROUP BY
`companyobjects`.`objectid`
I
_
Hitta rätt på nätet med MSN Search http://search.msn.se/
The solution is to redesign your tables. You need to split into separate
columns the values you want to maintain. You do not want to keep the flat
file design you are currently trying to use.
CREATE TABLE calendar (
objectid,
year,
dayofyear,
... other fields...
)
CREATE TABLE price (
objectid,
year,
dayofyear,
price
)
Having a separate column for each day of the year may make sense to a
person but as you have discovered, it is extremely difficult to use for
any kind of ad-hoc querying. A more normalized data structure will be
almost as efficient in space usage but 1000s of times more efficient for
querying. There is no simple way to write a query that spans years with
the table structures you currently have.
Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine