代码之家  ›  专栏  ›  技术社区  ›  addohm

SQL条件查询解决方案

  •  1
  • addohm  · 技术社区  · 8 年前

    SELECT lQ.[QUANTITY], lQ.[FORM_FACTOR_ID], oQ.[INDIVIDUAL_PACKAGING] 
    FROM [dbo].[AOF_ORDER_LINE_QUEUE] as lQ
    LEFT JOIN [dbo].[AOF_ORDER_QUEUE] AS oQ
      ON lQ.[SALES_ORDER_NUMBER] = oQ.[SALES_ORDER_NUMBER]
    

    我可以看到我自己用我最熟悉的语言很容易地完成这个循环。基于一些初步研究,在SQL中循环似乎不是一件好事,所以我正在寻求建议。

    我需要输出一个总值,它是 lQ.[QUANTITY] . 条件是如果 oQ.[FORM_FACTOR_ID] lQ。[数量] 等于2,则如果 oQ.[INDIVIDUAL_PACKAGING] 则查询中该特定行的输出等于 . 如果该值为false,则查询中该特定行的输出除以2。最终输出需要是单个整数。

    QUANTITY    FORM_FACTOR_ID  INDIVIDUAL_PACKAGING
    4           2               1
    5           1               1
    

    我需要一个为上表输出值7的查询。

    QUANTITY    FORM_FACTOR_ID  INDIVIDUAL_PACKAGING
    4           2               0
    5           2               0
    

    同样的查询需要为上表输出5。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Gordon Linoff    8 年前

    如果我正确理解了这个问题,您只需要条件聚合——一个 CASE 作为 SUM()

    如果我遵循逻辑,它将看起来像:

    SELECT SUM(CASE WHEN oq.FORM_FACTOR_ID = 1 THEN lQ.QUANTITY
                    WHEN oQ.FORM_FACTOR_ID = 2 AND oQ.INDIVIDUAL_PACKAGING = 1 THEN lQ.QUANTITY
                    WHEN oQ.FORM_FACTOR_ID = 2 AND oQ.INDIVIDUAL_PACKAGING = 0 THEN lQ.QUANTITY / 2
                END)
    FROM [dbo].[AOF_ORDER_LINE_QUEUE] lQ LEFT JOIN
         [dbo].[AOF_ORDER_QUEUE] oQ
         ON lQ.[SALES_ORDER_NUMBER] = oQ.[SALES_ORDER_NUMBER];