以百分比显示视图中的结果

时间:2012-02-13 19:42:44

标签: sql sql-server sql-server-2008

我正在开发一个包含客户,文章,发票等的数据库。在MSSQL Server Management Studio中,我创建了一个View以显示发票和inooice行中的销售。

发票表中的两列是销售税和折扣,两者都是小数(例如,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

3 个答案:

答案 0 :(得分:6)

首先,从视图定义中删除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的工作,你也可能不想假设最终用户的区域设置。
  • 您需要注意将税号存储在表格中,而不是实际征税。如果税率随着时间的推移而变化,那么如果您的历史数据指向相同的税号但费率已发生变化,那么您的历史数据就不会准确。

答案 1 :(得分: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)) + '%'

答案 2 :(得分: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