【问题标题】:Need to incorporate if else statement within my code需要在我的代码中加入 if else 语句
【发布时间】:2014-03-20 20:15:38
【问题描述】:

我试图在下面的代码中实现 if else 语句或 case 语句。我想使用这些语句之一(如果或案例)来查看我的 RT_Ch_Pres_PX1 值是否在特定的最小或最大规格范围内,如果它们高于或低于我想说如果我的 RT_Ch_Pres_PX1 低于我的最小值这么多然后显示该值并表示它是多少,并且与超过最大值相同。例如,如果我的 RT_Ch_Pres_PX1 值为 5,我想在 6 处使用我的最小值,在 10 处使用最大值。所以我的 Rt_Ch_pres_px1 值关闭了 1,所以我想显示这个并说这个值是 1 值。如果 RT_Ch_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;

【问题讨论】:

  • 您当前的代码不起作用怎么办?它是否返回错误?

标签: sql sql-server sql-server-2008 reporting-services


【解决方案1】:

这种情况会产生你想要的值:

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_Ch_Pres_PX1 值是否在我的规格范围内
  • 如何使用 case 语句来处理不同的 RT_Phase_Name 并使用我的 RT_Ch_Pres_PX1 设置 RT_Phase_Name 以查看 RT_Phase_Name 阶段是否在我的 RT_Ch_Pres_PX1 内
  • 您可以将其分配给变量,也可以将其包含在读入变量的选择语句中。当您没有提供包含最小/最大值的变量名称时,很难用工作代码来回答。
  • 我们将硬编码最小/最大值(根据我的phasechangecount手动输入我的每个阶段的代码)
猜你喜欢
  • 2015-03-13
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多