|
-
Jul 25th, 2008, 01:43 AM
#1
Thread Starter
Addicted Member
Sum a subquery
I have a problem guys, i need to sum all the values that is retrived in column coil and kilograms, my problem is i dont know how, cause i use subquery and aggregate fuinctions: look at my example
Code:
SELECT I.ITEMNAME [RAW MATERIAL] , I.MATERIALSIZE, I2.ITEMNAME PRODUCTS,
CASE
WHEN it.UNITMEASUREID = 11 THEN
IT.QUANTITY
when it.UNITMEASUREID = 1
then It.quantity / (select unitvalue from unitmeasureconversions where unitmeasureid = 1 And unitmeasureconversions.itemid = it.itemid)*
(select unitvalue from unitmeasureconversions where unitmeasureid = 11 And unitmeasureconversions.itemid = it.itemid )
else 0 end Coil,
Case
WHEN it.UNITMEASUREID = 1 THEN
IT.QUANTITY Else It.quantity / (select unitvalue from unitmeasureconversions where unitmeasureid = 1 And unitmeasureconversions.itemid = it.itemid)*
(select unitvalue from unitmeasureconversions where unitmeasureid = 11 And unitmeasureconversions.itemid = it.itemid) end Kilogram
FROM ITEMTRANSACTIONS IT
JOIN DEPARTMENTS D ON D.DEPARTMENTID = IT.DEPARTMENTID
JOIN SECTIONS S ON S.SECTIONID = IT.SECTIONID
JOIN SUBSECTIONS SUBS ON SUBS.SUBSECTIONID = IT.SUBSECTIONID
JOIN SUBSECTIONAREAS SUBA ON SUBA.SUBSECTIONAREAID = IT.SUBSECTIONAREAID
JOIN ITEMS I ON I.ITEMID = IT.ITEMID
JOIN ITEMS I2 ON I2.ITEMID = IT.ASSIGNTOITEMID
JOIN UNITMEASURES UM ON UM.UNITMEASUREID = IT.UNITMEASUREID
JOIN UNITMEASURECONVERSIONS UMC ON UMC.UNITMEASUREID = IT.UNITMEASUREID And UMC.itemid = it.ITEMID
Join Machines M on m.MachineId = it.machineid
WHERE D.DEPARTMENTID = 4 AND S.SECTIONID = 13 AND SUBS.SUBSECTIONID = 4 AND SUBA.SUBSECTIONAREAID = 2
AND (UM.UnitmeasureID = 11 Or UM.UnitmeasureID = 1)
all i want is to to do something like this but i have an error:
Code:
SELECT I.ITEMNAME [RAW MATERIAL] , I.MATERIALSIZE, I2.ITEMNAME PRODUCTS,
CASE
WHEN it.UNITMEASUREID = 11 THEN
Sum(IT.QUANTITY)
when it.UNITMEASUREID = 1
then Sum(It.quantity / (select unitvalue from unitmeasureconversions where unitmeasureid = 1 And unitmeasureconversions.itemid = it.itemid)*
(select unitvalue from unitmeasureconversions where unitmeasureid = 11 And unitmeasureconversions.itemid = it.itemid ))
else 0 end Coil,
Case
WHEN it.UNITMEASUREID = 1 THEN
Sum(IT.QUANTITY) Else Sum(It.quantity / (select unitvalue from unitmeasureconversions where unitmeasureid = 1 And unitmeasureconversions.itemid = it.itemid)*
(select unitvalue from unitmeasureconversions where unitmeasureid = 11 And unitmeasureconversions.itemid = it.itemid)) end Kilogram
FROM ITEMTRANSACTIONS IT
JOIN DEPARTMENTS D ON D.DEPARTMENTID = IT.DEPARTMENTID
JOIN SECTIONS S ON S.SECTIONID = IT.SECTIONID
JOIN SUBSECTIONS SUBS ON SUBS.SUBSECTIONID = IT.SUBSECTIONID
JOIN SUBSECTIONAREAS SUBA ON SUBA.SUBSECTIONAREAID = IT.SUBSECTIONAREAID
JOIN ITEMS I ON I.ITEMID = IT.ITEMID
JOIN ITEMS I2 ON I2.ITEMID = IT.ASSIGNTOITEMID
JOIN UNITMEASURES UM ON UM.UNITMEASUREID = IT.UNITMEASUREID
JOIN UNITMEASURECONVERSIONS UMC ON UMC.UNITMEASUREID = IT.UNITMEASUREID And UMC.itemid = it.ITEMID
Join Machines M on m.MachineId = it.machineid
WHERE D.DEPARTMENTID = 4 AND S.SECTIONID = 13 AND SUBS.SUBSECTIONID = 4 AND SUBA.SUBSECTIONAREAID = 2
AND (UM.UnitmeasureID = 11 Or UM.UnitmeasureID = 1)
group by m.machineID
i get an error sayin: cannot use sum function with an aggregate function or subquery inside of it.. sounds like that. Any help or option how to fix this thing? Thanks
-
Jul 25th, 2008, 01:58 AM
#2
Re: Sum a subquery
You would need to use a temp table to store intermediate data. You can then perform a subsequent query against that data just like any other table.
-
Jul 25th, 2008, 02:05 AM
#3
Thread Starter
Addicted Member
Re: Sum a subquery
Is it efficient? I'll be using it against the crystal reports 10. Is there any ways to do this thing there. thanks men, you always answers my question
-
Jul 25th, 2008, 02:12 AM
#4
Re: Sum a subquery
Using temp tables does slow a query down but you gotta do what you gotta do.
-
Jul 25th, 2008, 02:19 AM
#5
Re: Sum a subquery
I had a very similar problem recently and, as usual, VBF provided the answer. You select from a subquery in which you've obtained all the values you need to:-
Code:
Select ItemName
...
case when UnitMeasured = 11
then quantity
when UnitMeasured = 1
then quanity/Kilogram
end
From
(Select ItemName,
...
UnitMeasured,
Quantity,
(select unitvalue from unitmeasureconversions where unitmeasureid = 1 And unitmeasureconversions.itemid = it.itemid)*
(select unitvalue from unitmeasureconversions where unitmeasureid = 11 And unitmeasureconversions.itemid = it.itemid) as Kilogram
From ItemTransactions
Inner Join ...
) as MyBaseValues
Last edited by FunkyDexter; Jul 25th, 2008 at 02:23 AM.
The best argument against democracy is a five minute conversation with the average voter - Winston Churchill
Hadoop actually sounds more like the way they greet each other in Yorkshire - Inferrd
-
Jul 27th, 2008, 09:26 PM
#6
Thread Starter
Addicted Member
Re: Sum a subquery
please help me o fix this. i got a syntax error near last line.. thanks
Code:
SELECT
M.MACHINENAME,
I.ITEMNAME [RAW MATERIAL],
I.MATERIALSIZE,
I2.ITEMNAME PRODUCTS,
CASE
WHEN IT.UNITMEASUREID = 11 THEN
sum(IT.QUANTITY) Else sum(IT.QUANTITY/ coil) End Coil2,
CASE
WHEN IT.UNITMEASUREID = 1 THEN
sum(IT.QUANTITY) else sum(IT.QUANTITY / coil) end Kilgram2
From (
Select (SELECT UNITVALUE FROM UNITMEASURECONVERSIONS WHERE UNITMEASUREID = 1 AND UNITMEASURECONVERSIONS.ITEMID = IT.ITEMID)*
(SELECT UNITVALUE FROM UNITMEASURECONVERSIONS WHERE UNITMEASUREID = 11 AND UNITMEASURECONVERSIONS.ITEMID = IT.ITEMID )
As COIL
FROM ITEMTRANSACTIONS IT
JOIN DEPARTMENTS D ON D.DEPARTMENTID = IT.DEPARTMENTID
JOIN SECTIONS S ON S.SECTIONID = IT.SECTIONID
JOIN SUBSECTIONS SUBS ON SUBS.SUBSECTIONID = IT.SUBSECTIONID
JOIN SUBSECTIONAREAS SUBA ON SUBA.SUBSECTIONAREAID = IT.SUBSECTIONAREAID
JOIN ITEMS I ON I.ITEMID = IT.ITEMID
JOIN ITEMS I2 ON I2.ITEMID = IT.ASSIGNTOITEMID
JOIN UNITMEASURES UM ON UM.UNITMEASUREID = IT.UNITMEASUREID
JOIN UNITMEASURECONVERSIONS UMC ON UMC.UNITMEASUREID = IT.UNITMEASUREID AND UMC.ITEMID = IT.ITEMID
JOIN MACHINES M ON M.MACHINEID = IT.MACHINEID
WHERE D.DEPARTMENTID = 4 AND S.SECTIONID = 13 AND SUBS.SUBSECTIONID = 4 AND SUBA.SUBSECTIONAREAID = 2
AND (UM.UNITMEASUREID = 11 OR UM.UNITMEASUREID = 1)
Group by m.machineid,I.ITEMNAME,I.MATERIALSIZE, I2.ITEMNAME)
-
Jul 28th, 2008, 08:30 AM
#7
Re: Sum a subquery
I made exactly the same mistake when I did this. You have to give the subselect an alias. I have no idea why. Add an alias just after your group by:-
Code:
SELECT
M.MACHINENAME,
I.ITEMNAME [RAW MATERIAL],
I.MATERIALSIZE,
I2.ITEMNAME PRODUCTS,
CASE
WHEN IT.UNITMEASUREID = 11 THEN
sum(IT.QUANTITY) Else sum(IT.QUANTITY/ coil) End Coil2,
CASE
WHEN IT.UNITMEASUREID = 1 THEN
sum(IT.QUANTITY) else sum(IT.QUANTITY / coil) end Kilgram2
From (
Select (SELECT UNITVALUE FROM UNITMEASURECONVERSIONS WHERE UNITMEASUREID = 1 AND UNITMEASURECONVERSIONS.ITEMID = IT.ITEMID)*
(SELECT UNITVALUE FROM UNITMEASURECONVERSIONS WHERE UNITMEASUREID = 11 AND UNITMEASURECONVERSIONS.ITEMID = IT.ITEMID )
As COIL
FROM ITEMTRANSACTIONS IT
JOIN DEPARTMENTS D ON D.DEPARTMENTID = IT.DEPARTMENTID
JOIN SECTIONS S ON S.SECTIONID = IT.SECTIONID
JOIN SUBSECTIONS SUBS ON SUBS.SUBSECTIONID = IT.SUBSECTIONID
JOIN SUBSECTIONAREAS SUBA ON SUBA.SUBSECTIONAREAID = IT.SUBSECTIONAREAID
JOIN ITEMS I ON I.ITEMID = IT.ITEMID
JOIN ITEMS I2 ON I2.ITEMID = IT.ASSIGNTOITEMID
JOIN UNITMEASURES UM ON UM.UNITMEASUREID = IT.UNITMEASUREID
JOIN UNITMEASURECONVERSIONS UMC ON UMC.UNITMEASUREID = IT.UNITMEASUREID AND UMC.ITEMID = IT.ITEMID
JOIN MACHINES M ON M.MACHINEID = IT.MACHINEID
WHERE D.DEPARTMENTID = 4 AND S.SECTIONID = 13 AND SUBS.SUBSECTIONID = 4 AND SUBA.SUBSECTIONAREAID = 2
AND (UM.UNITMEASUREID = 11 OR UM.UNITMEASUREID = 1)
Group by m.machineid,I.ITEMNAME,I.MATERIALSIZE, I2.ITEMNAME
as MyBaseValues)
The best argument against democracy is a five minute conversation with the average voter - Winston Churchill
Hadoop actually sounds more like the way they greet each other in Yorkshire - Inferrd
-
Jul 28th, 2008, 07:32 PM
#8
Thread Starter
Addicted Member
Re: Sum a subquery
stil doesn't work . how sad
-
Jul 29th, 2008, 03:51 AM
#9
Re: Sum a subquery
What error message are you getting and what line is highlighted when you click on it?
The best argument against democracy is a five minute conversation with the average voter - Winston Churchill
Hadoop actually sounds more like the way they greet each other in Yorkshire - Inferrd
-
Jul 29th, 2008, 03:55 AM
#10
Thread Starter
Addicted Member
Re: Sum a subquery
syntax error near " as mybasevalues"
-
Jul 29th, 2008, 05:57 AM
#11
Re: Sum a subquery
Sorry, my fault .
The final bracket's in the wrong place. Move it so it's between I2.ItemName and AS. That should sort it for you.
The best argument against democracy is a five minute conversation with the average voter - Winston Churchill
Hadoop actually sounds more like the way they greet each other in Yorkshire - Inferrd
-
Jul 29th, 2008, 07:14 PM
#12
Thread Starter
Addicted Member
Re: Sum a subquery
bound error
-
Jul 30th, 2008, 03:45 AM
#13
Re: Sum a subquery
I have no idea what that meant...
The best argument against democracy is a five minute conversation with the average voter - Winston Churchill
Hadoop actually sounds more like the way they greet each other in Yorkshire - Inferrd
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|