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'附近有不正确的文章结构
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'附近有不正确的文章结构
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
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顺序反了.
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 句中没包含,在选择名单内无效。
列'DKS.LOT_NO'因为总计函数或 GROUP BY 句中没包含,在选择名单内无效。
列'MKK.KANRI_KOTEI_NAME'因为总计函数或 GROUP BY 句中没包含,在选择名单内无效。
这些列没在GROUP BY中,要根据你的需求,加聚合函数sum(),count(),max(),min()
参考:
使用 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。
tb表假如有这样的数据
名字 成绩
小明 80
小明 70
小江 87
以你的方法你看看, select 名字,成绩 from tb group by 名字,(这肯定有问题啊,既然按名字分组了,对于名字来说,小明是同一个人, 查出来的应该是一行吧(因为分组了),而它的成绩有两个,
那应该是选哪个呢,这样写,估计SQL自己也不知道。 也就是其它没有出现在group by 后面的字段都要有聚合函数, 你想如果写成 sum(成绩)或 max(成绩), 名字小明对应的两个成绩,不就变成了一行了嘛,不知道我有没有讲明白!)
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