在变量集中使用当前行计算(SQL Server)

时间:2018-07-31 03:16:02

标签: sql sql-server

使用SQL Server和SQL Server Management Studio v17.5。

我正在尝试使用所选表中的值来运行计算。例如下面。我希望“开始”值为当前行的“最终库存编号”减去“库存总数”。因此,对于每一行,将对该表的该行中包含的特定值感到满意。有没有一种方法可以通过设置变量来实现?

USE [Fishery_Tanks_Ponds]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[sp_Report_WhiteSturgeon]
AS
    DECLARE @Start_Inv NVARCHAR(50)
    SET @Start_Inv = Final_Inventory_# - Stocking_Total_#

    SELECT
        @Start_Inv AS [Start Inventory],
        Stocking_Total_#, Final_Inventory_# 
    FROM
        aa_Tanks_Ponds

最终结果应类似于:

Start Inventory  |  Stocking_Total_#   |   Final_Inventory_#
300              |  500                |   800
400              |  250                |   650
800              |  350                |   1150

1 个答案:

答案 0 :(得分:1)

不确定要使用该变量做什么,但是不能像这样在查询中简单地执行计算

select [Final_Inventory_#] - [Stocking_Total_#] as [Start Inventory],
       Stocking_Total_#,
       Final_Inventory_# 
from   aa_Tanks_Ponds

如果您的计算过于复杂,则可以考虑使用CROSS APPLY并在内部执行计算

select [Start Inventory],
       Stocking_Total_#,
       Final_Inventory_# 
from   aa_Tanks_Ponds 
       cross apply
       (
           select [Final_Inventory_#] - [Stocking_Total_#] as [Start Inventory]
       ) si

OR

假设计算不太复杂或不依赖于其他外部表,您也可以在表的创建中使用计算列进行计算。