SELECT DKS.LOT_SETSUBI_CD AS LOT_SETSUBI_CD,      DKS.LOT_NO AS LOT_NO,      DKS.KANRI_KOTEI_CD AS KANRI_KOTEI_CD,      MKK.KANRI_KOTEI_NAME AS KANRI_KOTEI_NAME,      DKS.SAGYO_START_DATE AS SAGYO_START_DATE,      DKS.SAGYO_END_DATE AS SAGYO_END_DATE,      DKS.SAGYO_STATUS AS SAGYO_STATUS
  FROM RDDATAV4.SO.D_KOTEI_SAGYO AS DKS  
JOIN MSDATAV4.SO.M_KANRI_KOTEI AS MKK  
ON DKS.KANRI_KOTEI_CD=MKK.KANRI_KOTEI_CD  
WHERE DKS.LOT_SETSUBI_CD =1111 AND DKS.LOT_NO =10120811  AND DKS.KOTEI_SHUBETSU = '0'  
ORDER BY DKS.SAGYO_END_DATE,          DKS.SAGYO_START_DATE
GROUP BY DKS.KANRI_KOTEI_CD,          DKS.SAGYO_START_DATE,          DKS.SAGYO_END_DATE,          DKS.SAGYO_STATUS
错误提示信息如下:
'GROUP'附近有不正确的文章结构

解决方案 »

  1.   

    去掉group 这句如果需要聚合,你SELECT 后面需要有SUM() ,COUNT() 等聚合函数
      

  2.   

    先GROUP BY 再ORDER BY
      

  3.   

    SELECT DKS.LOT_SETSUBI_CD AS LOT_SETSUBI_CD, DKS.LOT_NO AS LOT_NO, DKS.KANRI_KOTEI_CD AS KANRI_KOTEI_CD, MKK.KANRI_KOTEI_NAME AS KANRI_KOTEI_NAME, DKS.SAGYO_START_DATE AS SAGYO_START_DATE, DKS.SAGYO_END_DATE AS SAGYO_END_DATE, DKS.SAGYO_STATUS AS SAGYO_STATUS
      FROM RDDATAV4.SO.D_KOTEI_SAGYO AS DKS   
    JOIN MSDATAV4.SO.M_KANRI_KOTEI AS MKK   
    ON DKS.KANRI_KOTEI_CD=MKK.KANRI_KOTEI_CD   
    WHERE DKS.LOT_SETSUBI_CD =1111 AND DKS.LOT_NO =10120811 AND DKS.KOTEI_SHUBETSU = '0' GROUP BY DKS.KANRI_KOTEI_CD, DKS.SAGYO_START_DATE, DKS.SAGYO_END_DATE, DKS.SAGYO_STATUS  
    ORDER BY DKS.SAGYO_END_DATE, DKS.SAGYO_START_DATE
      

  4.   

    SELECT DKS.LOT_SETSUBI_CD AS LOT_SETSUBI_CD, DKS.LOT_NO AS LOT_NO, DKS.KANRI_KOTEI_CD AS KANRI_KOTEI_CD, MKK.KANRI_KOTEI_NAME AS KANRI_KOTEI_NAME, DKS.SAGYO_START_DATE AS SAGYO_START_DATE, DKS.SAGYO_END_DATE AS SAGYO_END_DATE, DKS.SAGYO_STATUS AS SAGYO_STATUS
      FROM RDDATAV4.SO.D_KOTEI_SAGYO AS DKS   
    JOIN MSDATAV4.SO.M_KANRI_KOTEI AS MKK   
    ON DKS.KANRI_KOTEI_CD=MKK.KANRI_KOTEI_CD   
    WHERE DKS.LOT_SETSUBI_CD =1111 AND DKS.LOT_NO =10120811 AND DKS.KOTEI_SHUBETSU = '0'   
    GROUP BY DKS.KANRI_KOTEI_CD, DKS.SAGYO_START_DATE, DKS.SAGYO_END_DATE, DKS.SAGYO_STATUS
    ORDER BY DKS.SAGYO_END_DATE, DKS.SAGYO_START_DATE你order by , group by顺序反了.
      

  5.   

    SELECT DKS.LOT_SETSUBI_CD AS LOT_SETSUBI_CD, DKS.LOT_NO AS LOT_NO, DKS.KANRI_KOTEI_CD AS KANRI_KOTEI_CD, MKK.KANRI_KOTEI_NAME AS KANRI_KOTEI_NAME, DKS.SAGYO_START_DATE AS SAGYO_START_DATE, DKS.SAGYO_END_DATE AS SAGYO_END_DATE, DKS.SAGYO_STATUS AS SAGYO_STATUS
      FROM RDDATAV4.SO.D_KOTEI_SAGYO AS DKS  
    JOIN MSDATAV4.SO.M_KANRI_KOTEI AS MKK  
    ON DKS.KANRI_KOTEI_CD=MKK.KANRI_KOTEI_CD  
    WHERE DKS.LOT_SETSUBI_CD =1111 AND DKS.LOT_NO =10120811 AND DKS.KOTEI_SHUBETSU = '0'  
    GROUP BY DKS.KANRI_KOTEI_CD, DKS.SAGYO_START_DATE, DKS.SAGYO_END_DATE, DKS.SAGYO_STATUS
    ORDER BY DKS.SAGYO_END_DATE, DKS.SAGYO_START_DATE
    这样的话又会报错:列'DKS.LOT_SETSUBI_CD'因为总计函数或 GROUP BY 句中没包含,在选择名单内无效。
    列'DKS.LOT_NO'因为总计函数或 GROUP BY 句中没包含,在选择名单内无效。
    列'MKK.KANRI_KOTEI_NAME'因为总计函数或 GROUP BY 句中没包含,在选择名单内无效。
      

  6.   

    列'DKS.LOT_SETSUBI_CD'因为总计函数或 GROUP BY 句中没包含,在选择名单内无效。
    列'DKS.LOT_NO'因为总计函数或 GROUP BY 句中没包含,在选择名单内无效。
    列'MKK.KANRI_KOTEI_NAME'因为总计函数或 GROUP BY 句中没包含,在选择名单内无效。
    这些列没在GROUP BY中,要根据你的需求,加聚合函数sum(),count(),max(),min()
      

  7.   

    任务书上只要求对以下四列进行分组:DKS.KANRI_KOTEI_CD, DKS.SAGYO_START_DATE, DKS.SAGYO_END_DATE, DKS.SAGYO_STATUS如果加聚合函数,具体该怎么做呢,您再帮帮忙吧
      

  8.   

    你没有搞明白group by的用法.
    参考:
    使用 GROUP BY 分组多行
    GROUP BY 子句用来为结果集中的每一行产生聚合值。如果聚合函数没有使用 GROUP BY 子句,则只为 SELECT 语句报告一个聚合值。以下示例返回分类 2 中每种产品已销售的单位数量:USE Northwind
    SELECT OrdD.ProductID AS ProdID,
           SUM(OrdD.Quantity) AS AmountSold
    FROM [Order Details] AS OrdD JOIN Products as Prd
         ON OrdD.ProductID = Prd.ProductID
         AND Prd.CategoryID = 2
    GROUP BY OrdD.ProductID下面是结果集:ProdID      AmountSold  
    ----------- ----------- 
    3           328         
    4           453         
    5           298         
    6           301         
    8           372         
    15          122         
    44          601         
    61          603         
    63          445         
    65          745         
    66          239         
    77          791         (12 row(s) affected)GROUP BY 关键字后面跟着列的列表,称为分组列。GROUP BY 子句限制结果集中的行;对于分组列中的每个非重复值只有一行。每个结果集行都包含与其分组列中特定值相关的汇总数据。当 SELECT 语句中包含 GROUP BY 关键字时,对可以在选择列表中指定的项有一些限制。在该选择列表中所允许的项目是: 分组列。
    为分组列中的每个值只返回一个值的表达式,例如将列名作为其中一个参数的聚合函数。这些函数称为矢量聚合。 
    例如,TableX 包含:ColumnA ColumnB ColumnC 
    ------- ------- ------- 
    1 abc 5 
    1 def 4 
    1 ghi 9 
    2 jkl 8 
    2 mno 3 如果 ColumnA 是分组列,则结果集中将有两行,其中一行汇总值 1 的信息,而另一行汇总值 2 的信息。如果 ColumnA 是分组列,要引用 ColumnB 或 ColumnC,这两列必须能为 ColumnA 中的每个值返回单个值的聚合函数中的参数。选择列表中包含诸如 MAX (ColumnB)、SUM (ColumnC) 或 AVG (ColumnC) 之类的表达式是合法的:SELECT ColumnA,
           MAX(ColumnB) AS MaxB,
           SUM(ColumnC) AS SumC
    FROM TableX
    GROUP BY ColumnA该选择语句返回两行,为 ColumnA 中的每个唯一值各返回一行:ColumnA     MaxB SumC        
    ----------- ---- ----------- 
    1           ghi  18          
    2           mno  11          (2 row(s) affected)但是,选择列表中只包含 ColumnB 表达式是不合法的:SELECT ColumnA,
           ColumnB,
           SUM(ColumnC) AS SumC
    FROM TableX
    GROUP BY ColumnA由于 GROUP BY 关键字只能返回一行,该行 ColumnA 中的值为 1,因此无法返回与 ColumnA 中的值 1 关联的 ColumnB 的三个值(abc、def 和 ghi)。不能对 ntext、text、image 或 bit 列使用 GROUP BY 或 HAVING 子句,除非它们所在的函数返回的值具有其它数据类型。这样的函数包括 SUBSTRING 和 CAST。
      

  9.   

    是啊楼主没有明白 group by 的用法
    tb表假如有这样的数据
    名字     成绩
    小明      80
    小明      70
    小江      87
    以你的方法你看看, select 名字,成绩 from tb group by 名字,(这肯定有问题啊,既然按名字分组了,对于名字来说,小明是同一个人, 查出来的应该是一行吧(因为分组了),而它的成绩有两个,
    那应该是选哪个呢,这样写,估计SQL自己也不知道。        也就是其它没有出现在group by 后面的字段都要有聚合函数, 你想如果写成 sum(成绩)或 max(成绩), 名字小明对应的两个成绩,不就变成了一行了嘛,不知道我有没有讲明白!)
      

  10.   

    SELECT max(DKS.LOT_SETSUBI_CD) AS LOT_SETSUBI_CD, max(DKS.LOT_NO) AS LOT_NO, DKS.KANRI_KOTEI_CD AS KANRI_KOTEI_CD, max(MKK.KANRI_KOTEI_NAME) AS KANRI_KOTEI_NAME, DKS.SAGYO_START_DATE AS SAGYO_START_DATE, DKS.SAGYO_END_DATE AS SAGYO_END_DATE, DKS.SAGYO_STATUS AS SAGYO_STATUS
      FROM RDDATAV4.SO.D_KOTEI_SAGYO AS DKS   
    JOIN MSDATAV4.SO.M_KANRI_KOTEI AS MKK   
    ON DKS.KANRI_KOTEI_CD=MKK.KANRI_KOTEI_CD   
    WHERE DKS.LOT_SETSUBI_CD =1111 AND DKS.LOT_NO =10120811 AND DKS.KOTEI_SHUBETSU = '0'   
    GROUP BY DKS.KANRI_KOTEI_CD, DKS.SAGYO_START_DATE, DKS.SAGYO_END_DATE, DKS.SAGYO_STATUS
    ORDER BY DKS.SAGYO_END_DATE, DKS.SAGYO_START_DATE