标签: case-statement

为什么必须在CASE语句中对GROUP进行GROUP BY?

我正在尝试在SQL Server 2008中针对某些数据输入不一致的表运行查询,我必须处理这个问题.

表数据示例:

OrderID   Qty   Price   MarkedUpTotal
1         10    1.00    11.00
1         -1    1.00    -1.10
1         -1    1.00    1.10
Run Code Online (Sandbox Code Playgroud)

我必须处理数量为负数但MarkedUpTotal输入为正数的情况.

我想运行以下查询:

SELECT OrderID, SUM(Qty) as OrderTotalQty, 
        SUM(Qty*Price) as InternalCost,
        CASE WHEN Qty < 0 and MarkedUpTotal > 0 
             THEN sum(-1*MarkedUpTotal) 
             ELSE SUM(MarkedUpTotal) END as ClientCost  
    FROM OrderItems 
    GROUP BY OrderID
Run Code Online (Sandbox Code Playgroud)

但是,运行此查询时出现以下错误:

列数量在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.

列MarkedUpTotal在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.

我希望得到以下结果:

OrderID    OrderTotalQty   InternalCost   ClientCost
1          8               8.00           8.80
Run Code Online (Sandbox Code Playgroud)

我似乎很奇怪,当它们仅被CASE声明有条件地使用时,我必须是GROUP BY Qty和MarkedUpTotal.如果我删除最后一个选择(CASE语句),查询执行正常,并且不要求数量或价格在GROUP BY中.

为什么SQL需要这个?是否有一个查询可以完成上述任务?

目前我正在使用临时表来解决问题.如果需要,我会修改每个条目的MarkedUpTotal,然后在临时表的主查询中执行简单的SUM(MarkedUpTotal).

sql group-by case-statement

3
推荐指数
1
解决办法
2万
查看次数

你能在Bash脚本案例陈述中使用正则表达式"xyz*)"

我正在挖掘mysql_safe(试图添加一些选项),我遇到了这种用于从Launch Agent分配变量的bash脚本技术:com.mysql.mysqld.plist(我在mac上).

现在mysqld_safe不知道它是由LaunchCtl调用的,所以我假设任何选项都是由LaunchCtl转换成命令行参数,但我发现这个sytnax入侵了.谁知道这是如何工作的?

我理解Bash中Case/Switch的基础知识:

case "$myval" in
  switch1) do something;;
  switch2) do something;;
        *) do whatever fallthrough logic;;
esac      
Run Code Online (Sandbox Code Playgroud)

默认情况下通过使用*在下面的脚本块中,arg值是:" - baseased ="或"--datadir ="或"--pid-file ="等等但是什么与*in那里?
这是Switch语句中的正则表达式吗? 有一个后卫?

for arg do
  # the parameter after "=", or the whole $arg if no match
  val=`echo "$arg" | sed -e 's;^--[^=]*=;;'`
  # what's before "=", or the whole $arg if no match
  optname=`echo "$arg" | sed -e 's/^\(--[^=]*\)=.*$/\1/'`
  # replace "_" by "-" ; mysqld_safe must accept "_" like mysqld does.
  optname_subst=`echo "$optname" …
Run Code Online (Sandbox Code Playgroud)

bash case-statement

3
推荐指数
1
解决办法
4935
查看次数

SQL - 为此简单查询创建条件Where子句

我一直在尝试为下面的查询创建一个条件where子句,但我一直看到很多替代方案,我不知道在这种情况下使用什么.

我需要的是这样的东西:(当然这个代码是错误的)

where casCaseType='m'
  and casCurrentWorkflowID=990
  and cmsDateCreated between @FromDate and @ToDate

 CASE @WFStatus
      WHEN @WFStatus=1 then eveworkflowID<100
      WHEN @WFStatus=2 then eveworkflowID<200
      WHEN @WFStatus=3 then eveworkflowID<300
      WHEN @WFStatus=4 then eveworkflowID<400
 ELSE 0
 END
Run Code Online (Sandbox Code Playgroud)

因此,当我选择WFStatus参数为1时,它会自动使用where子句的那一部分,只显示那些eveworkflowID小于100的结果.

任何帮助将不胜感激!

谢谢

sql case case-statement where-clause

3
推荐指数
1
解决办法
4034
查看次数

嵌套开关?或其他解决方案检查不同条件?

好的,情况如下:

我有一个客户端有2个设置:ConnectionState和ConnectionSollState,都是相同的可枚举(TypeConnectionState),它们存储客户端连接的实际状态和连接应该是的状态.在to的每个组合上,都会发生不同的事情,例如ConnectionState为"已连接"但ConnectionSollState为"已关闭" - >拆除客户端.所以我有4种可能性需要检查.现在每个客户端都可以处理无限数量的会话,并且每个会话都有一个状态(StreamState和StreamSollState),这些状态可以有6个可枚举的选项.

从现在开始,我正在制作20个切换条件,我的代码看起来非常混乱,我在编码时每5分钟做错一次.有没有更简单的方法来处理这样的情况?(if/else)会让事情变得更糟.

例:

private void RTSPWorker() {
    try {
        byte[] buffer = new byte[2048];
        while (!mb_RTSPWorkerAbbort) {
        // Call TransportWD
            Thread.Sleep(100 * mi_ConnectionTimeOut);

            // Check ConnectionSollState
            switch(ConnectionSollState) {
                case TypeConnectionState.Connected:
                    // ConnectionSollState = Connected, check ConnectionState
                    switch(ConnectionState) {
                        case TypeConnectionState.Connected:
                            // ConnectionState is connected, keep-alive!
                            if(GET_PARAMETER() == null) {
                                DESCRIBE();
                            }
                            // Check streams too
                            foreach (cRTSPStream oStream in mo_StreamDict.Values) {
                                // Check StreamSollState
                                switch(oStream.RTSPStreamSollState) {
                                    case cRTSPStream.TypeRTSPStreamState.Play:
                                        // SollState is PLAY, check State
                                        switch(oStream.RTSPStreamState) {
                                            case …
Run Code Online (Sandbox Code Playgroud)

c# if-statement coding-style case-statement switch-statement

3
推荐指数
1
解决办法
4981
查看次数

如何使用Oracle Case Statement测试不平等

这很好用:

    select 
      case (1+2) -- (or_some_more_complicated_formula_yielding_a_numeric_result)
        when 200 then '200'
        when 100 then '100'
        else          'other'
      end hi_med_low
    from dual  ;
Run Code Online (Sandbox Code Playgroud)

但我需要做更多这样的事情:

    select 
      case (1+2) -- (or_some_more_complicated_formula_yielding_a_numeric_result)
        when greater than 200 then 'high'
        when less than    100 then 'low'
        else                       'medium'
      end hi_med_low
    from dual ;
Run Code Online (Sandbox Code Playgroud)

建议?

sql oracle case-statement

3
推荐指数
1
解决办法
6446
查看次数

带字符串的Ada case语句

我试图在case语句中使用一个字符串,但它让我expected a discrete type. Found type Standard.String明白字符串不是离散的.我想知道是否有工作.这是我的代码:

function Is_Valid_Direction(Direction_To_Go : in String) return Integer is
  Room : Integer := 0;
   begin
      --if (Direction_To_Go = "NORTH" or Direction_To_Go = "N") then
      --   Room := Building(currentRoom).exits(NORTH);
      --elsif (Direction_To_Go = "SOUTH" or Direction_To_Go = "S") then
      --   Room := Building(currentRoom).exits(SOUTH);
      --elsif (Direction_To_Go = "EAST" or Direction_To_Go = "E") then
      --   Room := Building(currentRoom).exits(EAST);
      --elsif (Direction_To_Go = "WEST" or Direction_To_Go = "W") then
      --   Room := Building(currentRoom).exits(WEST);
      --elsif (Direction_To_Go = "UP" or …
Run Code Online (Sandbox Code Playgroud)

string ada case-statement

3
推荐指数
1
解决办法
1981
查看次数

从 bash case 语句中获取通配符值

我想知道如何从案例通配符中获取值?我有一个为我生成菜单的数组。然后我有一个案例来确定选择了哪个选项。case 语句的最后一部分是通配符值。我正在寻找用于通配符的值。

这是我正在使用的代码:

menu=()
menu+=('Option 1')
menu+=('Option 2')
menu+=('Option 3')
menu+=('Option 4')
menu+=('Quit')

echo "What would you like to install?"
echo " "
select opt in "${menu[@]}"
do
    case $opt in
        'Option 1' )
            echo "Doing Option 1"
            ;;
        'Option 2' )
            echo "Doing Option 2"
            ;;
        'Option 3' )
            echo "Doing Option 3"
            ;;
        'Option 4' )
            echo "Doing Option 4"
            ;;
        'Quit' )
            echo "Quitting installations"
            exit;
            ;;
        * )
            echo "Invalid input: ${opt}"
            ;;
    esac
done
Run Code Online (Sandbox Code Playgroud)

在上面,“无效输入”值始终为空。我可以输入“foobar”作为选项,但它不显示。我也将变量更改为 …

bash case-statement

3
推荐指数
1
解决办法
637
查看次数

在ruby中声明的情况的替代方案

我正在根据哈希值分配一组值.

我必须根据传入的哈希键的值为另一个哈希键分配值.

传入哈希中有超过10个键(因此超过10个案例).

我想最小化代码.是否有任何替代方法可以缩短代码.

@hash1.each do |h1|
  case h1.mapped_field
    when 'value1'
      @hash2[h1.field_id] = value_1
    when 'value2'
      @hash2[h1.field_id] = value_2
    when 'value3'
      @hash2[h1.field_id] = value_3
    when 'value4'
      @hash2[h1.field_id] = value_4
    when 'value5'
      @hash2[h1.field_id] = value_5
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby arrays ruby-on-rails case-statement switch-statement

3
推荐指数
1
解决办法
427
查看次数

SQL Server 在 Case 语句中转换

我有一个名为compositeRate 的列,它是一个decimal(10,2) 数据类型。我正在编写一个 Select 语句,如果 compositeRate 为 0.00,则应返回空字符串,但我收到此错误:Msg 8114,级别 16,状态 5,第 1 行将数据类型 varchar 转换为数字时出错。

这是我的案例陈述

select CASE WHEN compositeRate = 0.00 THEN '' else compositeRate from table
Run Code Online (Sandbox Code Playgroud)

您能告诉我应该在案例陈述中的哪里写“convert”吗?

sql-server case case-statement

2
推荐指数
1
解决办法
4万
查看次数

在C中获取switch案例中的案例数

是否可以在C中切换案例中的案例数而无需手动添加在每种情况下递增的计数器变量?

c counting case-statement switch-statement

2
推荐指数
2
解决办法
961
查看次数