Sql 需要在我的代码中包含if-else语句

Sql 需要在我的代码中包含if-else语句,sql,sql-server,sql-server-2008,reporting-services,Sql,Sql Server,Sql Server 2008,Reporting Services,我试图在下面的代码中实现if-else语句或case语句。我想用这些语句中的一个来判断我的RT_Chu Pres_PX1值是否在一定的最小值或最大值范围内,如果它们高于或低于,我想说,如果我的RT_Chu Pres_PX1低于我的最小值这么多,那么显示该值,并指出超出最大值的程度。例如,如果我的RT_Chu_Pres_PX1值为5,我想使用最小值为6,最大值为10。所以我的Rt_Chu pres_px1的值是1,所以我想显示这个值,并说这个值是1。如果RT_Chu_Pres_PX1在最小值和最大

我试图在下面的代码中实现if-else语句或case语句。我想用这些语句中的一个来判断我的RT_Chu Pres_PX1值是否在一定的最小值或最大值范围内,如果它们高于或低于,我想说,如果我的RT_Chu Pres_PX1低于我的最小值这么多,那么显示该值,并指出超出最大值的程度。例如,如果我的RT_Chu_Pres_PX1值为5,我想使用最小值为6,最大值为10。所以我的Rt_Chu pres_px1的值是1,所以我想显示这个值,并说这个值是1。如果RT_Chu_Pres_PX1在最小值和最大值范围内,则不执行任何操作。请参阅下面的代码

                    DECLARE @Result TABLE
            (
                        RT_DateTime datetime,
                        RT_Phase_Name varchar(30),
                        RT_PhaseChangeCount int,
                        RT_Phase_Type int,
                        RT_Ch_Pres_PX1 float           
            );
            /* Variables used to track changes to Phase Name */
            DECLARE @RT_DateTime datetime;
            DECLARE @RT_Phase_Name varchar(30);
            DECLARE @RT_PhaseChangeCount int;
            DECLARE @RT_Phase_Type int;
            DECLARE @RT_Ch_Pres_PX1 float;
            DECLARE @PhaseNameHold varchar(30);
            DECLARE @PhaseChangeCount int;
            SELECT @PhaseNameHold = ' ';
            SELECT @PhaseChangeCount = 0;
            SELECT @RT_PhaseChangeCount = 0;

            /* Declare a cursor for determining when Phases change */

            DECLARE ImportCursor CURSOR FAST_FORWARD FOR

            SELECT 
            CONVERT(datetime, dbo.CycleData.Date_Time) as TimeConvert, 
            [dbo].[LookupPhases].[Phase_Name],
            [dbo].[cycledata].[phase_type],
            [dbo].[cycledata].[Ch_Pres_PX1]

            FROM
             CycleData INNER JOIN
                                     CycleDataHeader ON CycleData.Unit_Number = CycleDataHeader.Unit_Number AND CycleData.Cycle_Counter_No = CycleDataHeader.Cycle_Counter_No INNER JOIN
                                     LookupPhases ON CycleData.Phase_Type = LookupPhases.Phase_Type INNER JOIN
                                     LookupEvent ON CycleData.Event_Type = LookupEvent.Event_Id LEFT OUTER JOIN
                                     LookupAlarm ON CycleData.Alarm_Type = LookupAlarm.Alarm_Id

              WHERE 
            [dbo].[CycleDataHeader].[Entered_Load_No1] = 'T14-0008'


            ORDER BY

            /* Appears to be the order that needs to be reported on */

            Cycle_Time
            -- dbo.CycleData.Unit_Number,

            -- TimeConvert;

            OPEN ImportCursor;

            FETCH NEXT FROM ImportCursor INTO @RT_DateTime, 
                                                @RT_Phase_Name,
                                                @RT_Phase_Type,
                                                @RT_Ch_Pres_PX1  
            WHILE @@FETCH_STATUS = 0
            BEGIN
            IF (@RT_Phase_Name <> @PhaseNameHold)   
                BEGIN
                                    SET @PhaseNameHold = @RT_Phase_Name;
                                    SET @RT_PhaseChangeCount = @RT_PhaseChangeCount + 1;
                                    END
                        INSERT INTO @Result VALUES(@RT_DateTime, @RT_Phase_Name,@RT_PhaseChangeCount,@RT_Phase_Type,@RT_Ch_Pres_PX1);           
                        FETCH NEXT FROM ImportCursor INTO @RT_DateTime, @RT_Phase_Name,@RT_Phase_Type,@RT_Ch_Pres_PX1;
            END
            CLOSE ImportCursor;
            DEALLOCATE ImportCursor;
            SELECT
                        RT_DateTime,
                        RT_Phase_Name,
                        RT_PhaseChangeCount,
                        RT_Phase_Type,
                        RT_Ch_Pres_PX1 


            FROM @Result;

此案例将生成您想要的值:

case
  when RT_Ch_Pres_PX1 < some_min then RT_Ch_Pres_PX1 - some_min
  when RT_Ch_Pres_PX1 > some_max then RT_Ch_Pres_PX1 - some_max
  else 0
end

为下冲创造的价值是负面的,我认为这是个好主意。如果希望它为正,请翻转计算。

当前代码不起作用怎么办?是否返回错误?谢谢回复。主要的问题是,我在哪里可以将这个case语句合并到我的代码中。这是我遇到困难的部分。@Eric Hauenstein-我的代码工作正常,但我需要有一个最小值和最大值,它可以告诉我每次我的相位变化时我的RT_压力PX1值是否在我的规格范围内。我可以为不同的RT_相位_名称使用case语句,并将RT_相位_名称与我的RT_压力PX1设置为要查看的值吗RT_Phase_Name Phase在我的RT_Chu Pres_Px1中。您可以将其分配给变量,也可以将其包含在select语句中,该语句将被读入变量中。如果您没有提供包含最小/最大值的变量名,则很难用工作代码回答。我们将根据phasechangecount将最小/最大值硬编码到每个阶段的代码中