可以在SQL Server查询中将环境变量设置为整数吗?

时间:2019-08-01 17:43:52

标签: sql sql-server rounding

我在SQL Server 2012查询中有一堆计算,就像这样:

select T1_month
    ,a.some_value, b.value_to_compare,(select (some_value - value_to_compare)/value_to_compare*100 where value_to_compare != 0) percent_diff
    from 
    (select T1_month
    ,sum(some_value) some_value
    from T1
    group by T1_month) a
join 
    (select T2_month
    ,sum(value_to_compare) value_to_compare
    from T2
    group by T2_month) b
on a.T1_month = b.T2_month
order by T1_month;

我在这里使用了舍入函数,但是我需要添加更多类似的行。有什么方法可以只设置一个全局变量以一次取整所有列?否则,这只是很多工作。

round((some_value - value_to_compare)/value_to_compare*100, 2)

我将粘贴到Excel,但是最好在源中对其进行四舍五入而不必多次使用round函数。

1 个答案:

答案 0 :(得分:0)

这是一种解决方法,无需为每行键入Round()函数:

    SELECT 9.0 / 7 * 100 AS Direct_Query

    CREATE TABLE #Table_1 (
        [Column_1] [NUMERIC](18, 2) NULL
    )

    INSERT INTO #Table_1
    SELECT 9.0/7 * 100 

    SELECT Column_1 AS Temp_Table_Formatted FROM #Table_1

编辑:

如果无法使用临时表,则可以使用CTE包装查询,然后仅将Round()打包为CTE的结果,这在Sublime Text或{{3}等多行编辑器的帮助下非常容易}:

WITH CTE_Result_To_Format
AS (
    SELECT
        T1_month
       ,a.some_value
       ,b.value_to_compare
       ,(
            SELECT
                (some_value - value_to_compare) / value_to_compare * 100
            WHERE value_to_compare != 0
        )
        percent_diff
    FROM (
        SELECT
            T1_month
           ,SUM(some_value) some_value
        FROM T1
        GROUP BY
            T1_month
    ) a
    JOIN (
        SELECT
            T2_month
           ,SUM(value_to_compare) value_to_compare
        FROM T2
        GROUP BY
            T2_month
    ) b
        ON a.T1_month = b.T2_month
)
SELECT
        r.T1_month
       ,ROUND(r.some_value, 2)       AS some_value
       ,ROUND(r.value_to_compare, 2) AS value_to_compare
       ,ROUND(r.percent_diff, 2)     AS percent_diff
    FROM CTE_Result_To_Format r
    ORDER BY
        r.T1_month