Waarde berekening

  • Onderwerp starter Onderwerp starter Fury
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Fury

Nieuwe gebruiker
Lid geworden
4 feb 2009
Berichten
3
Hallo,

Ik heb een query probleempje.
Het betreft een voorraad app waarbij de artikel eenheden stuk, doos en meter zijn.
Artikelen hebben ook een verpakkingsaantal.
Dus wanneer de eenheid stuk is moet voor de waarde deze berekening worden uitgevoerd:
prijs x verpakkingsaantal x aantal.
Wanneer de eenheid doos is wordt de berekening zo:
prijs x aantal.
In de originele query zat er een foutje waardoor er nooit per doos werd gerekend.
Ik moest dus de query aanpassen en heb dit alsvolgt gedaan:

IF (SELECT ProductSupplier.Unit FROM ProductSupplier) = 'doos' BEGIN
SELECT Product.ProductName AS Beschrijving, Product.type, Product.length AS Lengte,
Product.thermal AS Thermisch, ColorName AS Kleur,
Color.ColorCode AS Kleurcode, Product.VitraluxCode, Product.Min, Product.Max, SUM(ProductSupplier.Quantity) AS Aantal,
SUM(ISNULL(Product.Length, 1) * ProductSupplier.Quantity * ProductSupplier.Price) AS Waarde, "
Product.ProductID FROM Product INNER JOIN ProductSupplier ON Product.ProductID = ProductSupplier.ProductID
LEFT OUTER JOIN Color ON Product.ColorID = Color.ColorID GROUP BY Product.ProductName,
Product.Type, Product.Length, Product.Thermal, Product.Min, Product.Max, Color.ColorName, Color.ColorCode, Product.VitraluxCode, Product.ProductID END
ELSE BEGIN
SELECT Product.ProductName AS Beschrijving, Product.type, Product.length AS Lengte,
Product.thermal AS Thermisch, ColorName AS Kleur,
Color.ColorCode AS Kleurcode, Product.VitraluxCode, Product.Min, Product.Max, SUM(ProductSupplier.Quantity) AS Aantal,
SUM(ISNULL(Product.Length, 1) * ProductSupplier.PackageQuantity * ProductSupplier.Quantity * ProductSupplier.Price) AS Waarde,
Product.ProductID FROM Product INNER JOIN ProductSupplier ON Product.ProductID = ProductSupplier.ProductID
LEFT OUTER JOIN Color ON Product.ColorID = Color.ColorID GROUP BY Product.ProductName,
Product.Type, Product.Length, Product.Thermal, Product.Min, Product.Max, Color.ColorName, Color.ColorCode, Product.VitraluxCode, Product.ProductID END

Maar daar krijg ik deze fout bij: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Ik heb weinig ervaring met if - else query's dus hoop ik dat iemand mij hier kan helpen?
 
De foutmelding betekend dat je ergens een subquery gebruikt waarbij je meer dan 1 kolom selecteert terwijl je een vergelijking doet, zoiets als dit:

Code:
SELECT *
FROM tabel
WHERE tabel.veld > ( SELECT veld1, veld2 FROM tabel2 WHERE veld3 = 'iets' )
Het probleem zit em er hier in dat je een 'groter dan' doet, maar dat je 2 velden terugkrijgt... het systeem weet dus niet wat hij moet doen; welke van de twee waardes gebruikt moeten worden.

Ik hoop dat je er wat aan hebt ik kan nu helaas niet je hele query uit gaan pluizen; mocht je er niet uitkomen kijk ik er naar als ik iets meer tijd heb :)
 
De foutmelding betekend dat je ergens een subquery gebruikt waarbij je meer dan 1 kolom selecteert terwijl je een vergelijking doet, zoiets als dit:

Code:
SELECT *
FROM tabel
WHERE tabel.veld > ( SELECT veld1, veld2 FROM tabel2 WHERE veld3 = 'iets' )
Het probleem zit em er hier in dat je een 'groter dan' doet, maar dat je 2 velden terugkrijgt... het systeem weet dus niet wat hij moet doen; welke van de twee waardes gebruikt moeten worden.

Ik hoop dat je er wat aan hebt ik kan nu helaas niet je hele query uit gaan pluizen; mocht je er niet uitkomen kijk ik er naar als ik iets meer tijd heb :)

Bedankt voor je antwoord.
Ik begreep de error wel maar ik weet niet hoe dit op te lossen.
In feite moet gewoon de berekening van de waarde veranderen naargelang de eenheid van een artikel doos of stuk is. Alleen weet ik niet hoe ik dit in de query moet krijgen.
De query moet een lijst weegeven van alle artikelen met hun waarde in voorraad per artikel.
 
Iemand heeft mij de oplossing gegeven via een ander forum:

Code:
SELECT Product.ProductName AS Beschrijving, Product.type, Product.length AS Lengte, 
Product.thermal AS Thermisch, ColorName AS Kleur, 
Color.ColorCode AS Kleurcode, Product.VitraluxCode, Product.Min, Product.Max, SUM(ProductSupplier.Quantity) AS Aantal, 
SUM(ISNULL(Product.Length, 1) * ProductSupplier.Quantity * ProductSupplier.Price * CASE WHEN ProductSupplier.Unit = 'doos' THEN 1 ELSE ProductSupplier.PackageQuantity END) AS Waarde, 
Product.ProductID FROM Product INNER JOIN ProductSupplier ON Product.ProductID = ProductSupplier.ProductID 
LEFT OUTER JOIN Color ON Product.ColorID = Color.ColorID GROUP BY Product.ProductName, 
Product.Type, Product.Length, Product.Thermal, Product.Min, Product.Max, Color.ColorName, Color.ColorCode, Product.VitraluxCode, Product.ProductID

Blij dat dit opgelost is. :p
Blijkbaar kan je geen lijst krijgen als resultaat bij een if else statement?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan