SQL简单的GROUP BY查询

时间:2018-07-06 08:28:00

标签: sql sql-server

是否可以使用SQL进行简单的GROUP BY查询,而不使用COUNT,AVG或SUM?我想显示所有列并将其分组为一个列。

SELECT * FROM [SPC].[dbo].[BoardSFC] GROUP BY boardsn

上面的查询在Mysql上有效,但在SQL上无效,是否有办法实现?任何建议都会很棒

更新:这是我的数据,我只需要按boardsn将它们分组并得到imulti等于1 enter image description here

3 个答案:

答案 0 :(得分:1)

我想您只是以不同于在sql server中实现的方式理解“组数据”。您只希望结果中具有相同值的行将排序而不是分组。所以也许您需要的是:

SELECT *
FROM  [SPC].[dbo].[BoardSFC]
WHERE imulti = 1
ORDER BY boardsn

答案 1 :(得分:0)

  

上面的查询在Mysql上有效,但在SQL上无效,是否有办法实现?任何建议都会很棒

不,没有。 MySQL只允许您这样做,因为它严重违反了各种SQL标准。

每当您使用GROUP BY时,都需要为结果集中的每个列命名。 SELECT *功能仅在以交互方式处理数据时提供了便利-在生产代码中,您切勿使用SELECT *

答案 2 :(得分:0)

您可以将TOP 1 WITH TIES与ORDER BY ROW_NUMBER结合使用。

SELECT TOP 1 WITH TIES *
FROM [SPC].[dbo].[BoardSFC] 
ORDER BY ROW_NUMBER() OVER (PARTITION BY boardsn ORDER BY imulti)

或更明确地说,在子查询中使用ROW_NUMBER

SELECT *
FROM
(
  SELECT *, ROW_NUMBER() OVER (PARTITION BY boardsn ORDER BY imulti) as RN
  FROM [SPC].[dbo].[BoardSFC] 
) q
where RN = 1