none
SQL能否运用 if,switch 等条件语句呢? RRS feed

  • 问题

  • 表1 :

    项目(nvarchar),批次(nvarchar),数量(int),金额(int)

    内容:

    项目     批次     数量     金额 

      A        001        1         10

      A        002        2         40

      B        003        3         20

    -------------------------------------------------------------

    希望得到的结果

    项目     批次     数量合计     金额合计

      A          -             3               50

      B        003           3               20

    -----------------------------------------------------------

    看似很简单的例子,  用GROUP BY 和SUM()就可以搞定合并和合计.

    但是批次的显示必须遵循以下规则:

    如果同时存在2个或以上相同项目,那么合并的批次用"-"代替.否则就直接显示该项目的批次.

    不知条件语句该如何编写?

     

    2010年11月17日 7:15

答案

  • 你好

    SQL 能用IF STATEMENT 的

    IF 1=2 

    BEGIN

    --TRUE ACTION

    END

    ELSE

    BEING

     

    END

     

    SELECT Col1, CASE WHEN COUNT(*) >1 THEN '--' ELSE 'something' END AS ColumnC

    FROM TABLE1

    大概是這樣的, 在你的情況中應該

    SELECT 项目     , CASE WHEN COUNT(批次)>1 THEN '---' ELSE MAX(批次) END  AS 批次, SUM(数量  ) AS 数量合计, SUM(金额 ) AS 金额合计

    FROM TABLE1

    GROUP BY 项目     

    Please correct me if my concept is wrong


    Chi
    • 已标记为答案 vboykk 2010年11月17日 9:21
    2010年11月17日 8:49

全部回复

  • 你好

    SQL 能用IF STATEMENT 的

    IF 1=2 

    BEGIN

    --TRUE ACTION

    END

    ELSE

    BEING

     

    END

     

    SELECT Col1, CASE WHEN COUNT(*) >1 THEN '--' ELSE 'something' END AS ColumnC

    FROM TABLE1

    大概是這樣的, 在你的情況中應該

    SELECT 项目     , CASE WHEN COUNT(批次)>1 THEN '---' ELSE MAX(批次) END  AS 批次, SUM(数量  ) AS 数量合计, SUM(金额 ) AS 金额合计

    FROM TABLE1

    GROUP BY 项目     

    Please correct me if my concept is wrong


    Chi
    • 已标记为答案 vboykk 2010年11月17日 9:21
    2010年11月17日 8:49
  • 实在太感谢兄弟的回复了,根据你的提示终于也写成功了!

    ----------------------------------------------------------------------------------

    SELECT  项目

               ,CASE WHEN COUNT(项目) >1

                                   THEN     '--'

                                   ELSE  (SELECT 批次 FROM 表1 WHERE 项目= ListA.项目 ) END AS  批次

              ,数量合计=SUM(数量合计)

              ,金额合计=SUM(金额合计)

      FROM 表1  ListA

      GROUP BY 项目

    ----------------------------------------------------------------------------------

    不知有没有效率问题?另外TEMP TABLE 是什么模式啊?建个临时表?

    2010年11月17日 9:21
  • 对头!!!

    将我之前的: ELSE  (SELECT 批次 FROM 表1 WHERE 项目= ListA.项目 ) END AS  批次

    改称         :  ELSE  MAX(批次)                                                               END  AS 批次

    哈哈.我想复杂了哈!

    2010年11月17日 9:31