Числа формата SQL должны иметь квадратные скобки - PullRequest
0 голосов
/ 17 января 2019

Мне нужно отформатировать отрицательное число, чтобы скобки в SQL и положительные числа отображались как стандартные.

Например, в настоящее время он показывает положительное значение как 399 и отрицательное значение как -399, когда мне нужно положительное значение, чтобы показать как 399 и отрицательное значение как -399.

Это для SQL Server 2005.

Я написал следующее для тестирования, которое работает.

SELECT num, CASE
    WHEN num < 0 THEN '(' + CAST(-num AS VARCHAR(11)) + ')'
    ELSE CAST(num AS VARCHAR(11))
END AS frmtd
FROM (
    SELECT    0 AS num UNION ALL
    SELECT  945        UNION ALL
    SELECT -945
) tests

Однако, как вы можете видеть, имя моего столбца просто num, но в запросе, который я пытаюсь реализовать, происходит вычисление.

Это строка:

SUM (PMC.[Net Sales] - PMCLY.[Net Sale LY]) / 1000  'Var Vs LY £k'

Может ли кто-нибудь помочь мне понять, как я могу это учитывать. Я знаю, что это должно быть сделано на уровне представления, но я хочу, чтобы это было сделано из SQL.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Разве это не работает?

SELECT num,
       (CASE WHEN (SUM(PMC.[Net Sales] - PMCLY.[Net Sale LY]) / 1000)  < 0
             THEN '(' + CAST(-(SUM(PMC.[Net Sales] - PMCLY.[Net Sale LY]) / 1000) AS VARCHAR(11)) + ')'
              ELSE CAST((SUM(PMC.[Net Sales] - PMCLY.[Net Sale LY]) / 1000) AS VARCHAR(11))
        END) AS frmtd
0 голосов
/ 17 января 2019

Сделать скалярную функцию для использования каждый раз

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
CREATE FUNCTION FormatBracket(@Value as money)
RETURNS varchar(30)
AS
BEGIN
    DECLARE @RETVAL AS varchar(30);
    select
         @retval = case when @VALUE < 0 THEN 
                                    '(' + cast(ABS(@value) as varchar(28)) + ')'
                      else
                                    cast(@value as varchar(28))
                    END;

    RETURN @RETVAL;     

END
GO

затем

SELECT num, dbo.FormatBracket(num)
AS frmtd
FROM (
SELECT    0 AS num UNION ALL
SELECT  945        UNION ALL
SELECT -945
) tests

Я использовал тип переменной MONEY, который может быть любым числовым типом, я не уверен, что деньги были в 2005

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...