【问题标题】:Value associated with the case statement condition in SQL [closed]SQL中与case语句条件关联的值[关闭]
【发布时间】:2018-09-12 19:43:37
【问题描述】:

我有两张桌子: 项目和工作 我正在尝试从项目表中获取项目的单位重量。 Job 表有两个项目代码列。第 1 项,第 2 项 我正在使用类似的东西。

  CASE 
      WHEN job.item2 
      LIKE '%cc%'
      THEN item.unitweight * job.qty
      ELSE job.qty
      END AS specific item

工作表

+-----+-------+-------+-----+
| job | Item1 | Item2 | qty |
+-----+-------+-------+-----+
|   1 | aa    | aaa   |   5 |
|   2 | bb    | cc    |   6 |
|   3 | cc    | bb    |   7 |
|   4 | aa    | ddd   |   8 |
+-----+-------+-------+-----+

物品表

+------+-------------+
| Item | Unit Weight |
+------+-------------+
| aa   |           5 |
| bb   |           6 |
| cc   |           7 |
| dd   |           8 |
+------+-------------+

我想让查询返回与 Item2 关联的 42,但我的查询返回 36

【问题讨论】:

  • 我不太明白你想要的结果。你能发布一份你想要的结果和你得到的样本吗?
  • 对于工作 2,您得到 6,即 bb 的值,但您希望 cc 的值为 7?加盟条件是什么?将第 2 项置于第 1 项之上?
  • 你能发布整个查询吗?
  • 认为我可能在您的查询中发现了错误。查看我的答案以获取更多信息...
  • @MK_ 你明白了,谢谢:)

标签: sql sql-server tsql case


【解决方案1】:

我猜你想要这样的东西?

SELECT j.job, j.Item1, j.Item2, j.qty
    , CASE
        WHEN j.Item2 = 'cc'  -- or do you want it to only have cc in it? then it would be LIKE '%cc%'
            THEN i2.unitweight * j.qty
        ELSE
            j.qty
      END
FROM Job j
    INNER JOIN Item i1 ON j.Item1 = i1.Item
    INNER JOIN Item i2 ON j.Item2 = i2.Item;

编辑:查看您的查询后,您可能希望将THEN ISNULL((item_mst.unit_weight * jobmatl_mst.matl_qty),0 更改为THEN ISNULL((bitem.unit_weight * jobmatl_mst.matl_qty),0。看来您只是乘以错误的单位重量?

【讨论】:

    【解决方案2】:

    使用我对您问题的最佳解释,我想出了这个:

        SELECT  J.JOB, 
                CASE  WHEN J.ITEM1 = 'cc' 
                      THEN I1.Unit_Wt * j.QTY
                      ELSE 0
                      END 
                        + CASE  WHEN J.ITEM2 = 'cc' 
                                THEN I2.Unit_Wt * j.QTY
                                ELSE 0
                                END AS cc_tot_wt
    
        FROM    #Job AS J
                LEFT JOIN #Item AS I1
                  ON I1.ITEM = J.ITEM1
                LEFT JOIN #Item AS I2
                  ON I2.ITEM = J.ITEM2
    
        WHERE   I1.ITEM = 'cc' 
                OR I2.ITEM = 'cc'
    

    这给出了作业 2 的 42 和作业 3 的 49 的答案,这是作业的项目 'cc' 的总权重。

    【讨论】:

      【解决方案3】:

      item2cc 时,我正在尝试从item 表中获取cc

      您可以通过将item2 左连接到您的查询来做到这一点:

      SELECT
        ...
        CASE 
            WHEN job.item2 
            LIKE '%cc%'
            THEN i2.unitweight * job.qty -- Use i2.unweight
            ELSE job.qty
            END AS specific item
      FROM job
      JOIN item on item.Item=job.Item1
      LEFT OUTER JOIN item i2 on i2.Item=job.Item2 -- Add this join
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 2020-01-01
        • 1970-01-01
        • 2020-06-27
        • 2012-02-07
        • 1970-01-01
        相关资源
        最近更新 更多