2012-02-13 4 views
1

Я работаю над базой данных, содержащей клиентов, статей, счетов и т. Д. В MSSQL Server Management Studio я создал представление, чтобы показать продажу в списках счетов и 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' кажется нецелесообразным (я предполагаю, что вы последуете моему совету и удалите' top/order by'). Нет никаких столбцов вывода или чего-нибудь еще, что ссылается на 'dbo.Invoice' ... –

ответ

5

Прежде всего, удалите TOP (100) PERCENT и ORDER 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

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 
Смежные вопросы