您可以在 SQL 服务器查询中将环境变量设置为整数吗?

can you set environmental variable to round numbers in SQL Server query?

我在 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() 函数:

    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

编辑:

如果你不能使用 temp table,你可以用 CTE 包装你的查询,然后只是 Round() CTE 的结果,这在像 [=12= 这样的多行编辑器的帮助下很容易做到]:

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