2009-12-13 13 views
0
SELECT @Tax = SUM(QuoteItem.SalesPrice) * TOP (1) Tax.Amount 
FROM Tax INNER JOIN 
     Job ON Tax.TaxId = Job.TaxId INNER JOIN 
     Quote ON Job.JobId = Quote.JobId INNER JOIN 
     QuoteItem INNER JOIN 
     Room ON QuoteItem.RoomId = Room.RoomId ON Quote.QuoteId = Room.QuoteId 
WHERE (Room.QuoteId = @QuoteId) AND (QuoteItem.UnitId = @UnitId) 
    RETURN @Tax 

Résultat:Besoin d'aide avec une requête SQL

Msg 156, Level 15, State 1, Procedure fn_GetQuoteUnitTax, Line 54 
Incorrect syntax near the keyword 'TOP'. 

Notez que quand j'omettez le TOP (1) il est dit:

Msg 8120, Level 16, State 1, Procedure fn_GetQuoteUnitTax, Line 54 
Column 'Tax.Amount' is invalid in the select list because it is not contained in 
either an aggregate function or the GROUP BY clause. 
+1

Il serait utile que vous nous avez dit ce que vous êtes essayant d'accomplir. –

+0

Ce que je veux faire est simple et vous pouvez le voir à partir de la requête, je veux prendre tous les SalesPrice de QuoteItems et le multiplier avec la taxe du travail. – Shimmy

+0

Pourquoi essayez-vous d'exécuter 'TOP 1' dans le champ tax.amount? De plus, votre SQL ne dispose pas des critères de jointure 'QUOTEITEM'. –

Répondre

0

Selon http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=137110:

SELECT @Tax = SUM(QuoteItem.SalesPrice * Tax.Amount) 
+0

Cela résout vos erreurs, mais il reviendra seulement une ligne - est-ce votre sortie désirée? –

+0

OUI. @Tax était censé être une valeur scalaire, Aussi vous pouvez voir que je n'attendais qu'une taxe, puisque j'ai essayé de faire TOP. – Shimmy

0

Je pense que vous devez faites ceci dans deux requêtes séparées. La première obtient le montant de la taxe:

select @tax = Tax.Amount 
    from Tax 
    inner join ...whatever else you need here... 
    where ... 

Notez que vous ne pouvez pas utiliser la clause « top » lors du réglage de la valeur de la variable @tax - vous aurez besoin de faire quelque chose dans votre clause where pour sélectionner la valeur que vous voulez .

ensuite obtenir le prix de vente:

select @sales = sum(QuoteItem.SalesPrice 
    from ... 
    where ... 

retour Enfin le résultat:

return @tax * @sales