Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在视图中以百分比显示结果_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 在视图中以百分比显示结果

Sql 在视图中以百分比显示结果,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在开发一个数据库,其中包含客户、文章、发票等。在MSSQL Server Management Studio中,我创建了一个视图,用于在发票和语音行中显示销售情况 发票表中的两列是销售税和折扣,这两列都是小数(例如0,25而不是25%),但在视图中,我希望以百分比的形式显示。问题是我就是不知道该怎么做,所以有没有善良的灵魂可以帮助我 提前谢谢 SELECT TOP (100) PERCENT dbo.Article.AricleID, dbo.Article.Artname,

我正在开发一个数据库,其中包含客户、文章、发票等。在MSSQL Server Management Studio中,我创建了一个视图,用于在发票和语音行中显示销售情况

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

假设您的金额存储为数字,只需乘以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)) + '%'

假设您的金额存储为数字,只需乘以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)) + '%'

只需将你的值乘以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

只需将你的值乘以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

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

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的工作,您也可能不想对最终用户的区域设置进行任何假设
  • 在表中存储税务ID时需要小心,而不是实际收取的税款。如果税率随时间变化,那么如果您的历史数据指向相同的税号,但税率发生了变化,那么您的历史数据将不准确

首先,从视图定义中删除
顶部(100%)部分
订单编号
。它们不保证任何顺序,除非您使用特定的跟踪标志来恢复SQL Server 2000功能,而且如果您仍在使用该跟踪标志,则不应该这样做。如果希望此视图中的查询结果按特定顺序返回,请将
orderby
添加到这些查询中

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的工作,您也可能不想对最终用户的区域设置进行任何假设
  • 在表中存储税务ID时需要小心,而不是实际收取的税款。如果税率随时间变化,那么如果您的历史数据指向相同的税号,但税率发生了变化,那么您的历史数据将不准确

加入
dbo.Invoice
似乎没有任何作用(我假设您将按照我的建议,通过
删除
top/order)。没有引用
dbo.Invoice
的输出列或任何其他内容……加入
dbo.Invoice
似乎没有任何作用(我假设您将按照我的建议,删除
top/order by
)。没有任何输出列或任何其他引用
dbo.Invoice
…非常感谢您的回答和建议,真的帮助了我!非常感谢你的回答和建议,真的帮助了我!