2012-02-13 173 views
1

我正在处理一个包含客户,文章,发票等的数据库。在MSSQL Server Management Studio中,我创建了一个View来显示发票和inovoice行中的销售。以百分比显示结果

发票表中的两列是销售税和折扣,两者都是小数(例如0,25而不是25%),但在视图中我想以百分比显示。问题是我无法弄清楚如何去做,所以有没有什么善良的灵魂可以帮助我?

在此先感谢。

SELECT  TOP (100) PERCENT dbo.Article.AricleID, dbo.Article.Artname, 
    dbo.Invoiceline.Quantity, dbo.Invoiceline.Price, dbo.Invoiceline.Discount, 
    dbo.Salestax.Salestax 
FROM dbo.Article 
     INNER JOIN dbo.Invoiceline ON dbo.Article.AricleID = dbo.Invoiceline.ArticleID 
     INNER JOIN dbo.Invoice ON dbo.Invoiceline.InvoiceID = dbo.Invoice.InvoiceID 
     INNER JOIN dbo.Salestax ON dbo.Invoiceline.SalestaxID = dbo.Salestax.SalestaxID 
ORDER BY dbo.Invoice.Date 
+1

加入到'dbo.Invoice'似乎没有任何用处(我假设你会遵循我的建议,并删除顶部/命令)。有没有输出列或任何其他引用'dbo.Invoice' ... – 2012-02-13 19:54:24

回答

5

首先,删除TOP (100) PERCENTORDER BY从您的视图定义。它们不保证任何顺序,除非您使用特定的跟踪标志来恢复SQL Server 2000功能 - 并且如果您仍在使用该跟踪标志,则不应该这样做。如果您希望此视图中的查询结果以特定顺序返回,请将ORDER BY添加到这些查询中。

CREATE VIEW dbo.MyView 
AS 
    SELECT 
     a.AricleID, a.Artname, il.Quantity, il.Price, 
     Discount = CONVERT(VARCHAR(10), 100*il.Discount) + '%', 
     Salestax = CONVERT(VARCHAR(10), 100*s.Salestax) + '%' 
    FROM 
     dbo.Article AS a 
     INNER JOIN dbo.Invoiceline AS il 
     ON il.AricleID = il.ArticleID 
     INNER JOIN dbo.Invoice AS i 
     ON il.InvoiceID = i.InvoiceID 
     INNER JOIN dbo.Salestax AS s 
     ON il.SalestaxID = s.SalestaxID; 

一对夫妇的其他意见:

  • 你真的应该被应用在表示层格式化 - 它不是SQL Server的工作,你也可能不想推测对最终用户的任何东西区域设置。
  • 您需要小心将税码存储在表格中,而不是实际收取的税款。如果税率随时间而改变,那么如果您的历史数据指向相同的税号,但税率发生了变化,则这些数据并不准确。
+0

非常感谢你的答案和建议,真的帮助我! – holyredbeard 2012-02-13 20:25:59

1

假设您的金额存储为数字,您只需乘以100即可获得%值。

SELECT dbo.Article.AricleID, dbo.Article.Artname, dbo.Invoiceline.Quantity, 
dbo.Invoiceline.Price, dbo.Invoiceline.Discount * 100, dbo.Salestax.Salestax *100 

,如果你想添加%符号,以及使用这样的事情对每个值

CONVERT(VARCHAR(20),(dbo.Invoiceline.Discount * 100)) + '%' 
0

只需乘以100自己的价值观,我添加了一些别名,以及更容易阅读。

所有的
SELECT TOP (100) PERCENT A.AricleID, A.Artname, IL.Quantity, IL.Price 
    , IL.Discount * 100 As Discount 
    , S.Salestax * 100 As SalesTax 
FROM dbo.Article A 
INNER JOIN dbo.Invoiceline IL 
    ON A.AricleID = IL.ArticleID 
INNER JOIN dbo.Invoice I 
    ON IL.InvoiceID = I.InvoiceID 
INNER JOIN dbo.Salestax S 
    ON IL.SalestaxID = S.SalestaxID 
ORDER BY I.Date