2009-12-13 136 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 

结果:需要一个SQL查询帮助

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

注意,当我忽略了TOP(1)它说:

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

如果你告诉我们你是什么这将有助于试图完成。 – 2009-12-13 12:36:30

+0

我想要做的事情很简单,你可以从查询中看到它,我想把所有的QuoteItems的SalesPrice都拿走,并且把它和Job的税率相乘。 – Shimmy 2009-12-13 13:05:14

+0

你为什么试图在tax.amount字段上运行'TOP 1'?另外,你的SQL缺少'QUOTEITEM'连接标准。 – 2009-12-13 18:02:29

回答

0

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

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

解决了你的错误,但它只会返回一行 - 是你想要的输出吗? – 2009-12-13 18:03:00

+0

是的。 @Tax应该是一个标量值,你也可以看到我只想要1税,因为我试图做TOP。 – Shimmy 2009-12-13 18:12:12

0

我认为你需要在两个单独的查询中执行此操作第一个得到税额:在设定@tax变量值的时候,你不能用“顶”条款

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

注 - 您将需要做的事情在你的where子句中选择你想要的值。

然后拿到销售价格:

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

最后返回结果:

return @tax * @sales