Показать результат в процентах - PullRequest
1 голос
/ 13 февраля 2012

Я работаю над базой данных, содержащей клиентов, статьи, счета и так далее. В 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

Ответы [ 3 ]

6 голосов
/ 13 февраля 2012

Прежде всего, удалите 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, и вы, возможно, не захотите ничего предполагать о региональных настройках конечного пользователя.
  • вам нужно быть осторожным с сохранениемИдентификатор налога в таблице, а не фактический взимаемый налог.Если налоговые ставки меняются со временем, ваши исторические данные не будут точными, если они указывают на один и тот же налоговый идентификатор, но ставка изменилась.
1 голос
/ 13 февраля 2012

при условии, что ваши суммы хранятся в виде чисел, вы просто умножаете на 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 голосов
/ 13 февраля 2012

Просто умножьте ваши значения на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...