2012-02-13 170 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