我正在尝试使用GROUP BY
命令执行SQL查询但我无法使其工作我尝试使用聚合函数来解决问题,但我认为下面正确执行它的更好方法是我的SQL查询。
SELECT TOP 100 cModel ,fdate, BoardSN
FROM FovComp
GROUP BY fdate ORDER BY CONVERT(datetime, fdate) DESC
错误低于
专栏' FovComp.cModel'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
我想要所有列,但必须按fdate
分组。任何建议都会很棒。
答案 0 :(得分:2)
GROUP BY
对计数,求和或平均有用,但你没有做到这一点。并且你必须这样做,否则GROUP BY
毫无意义,不被允许。
使用示例:
SELECT fdate, COUNT(cModel) AS COUNT_cModel, COUNT(BoardSN) AS COUNT_BoardSN
FROM FovComp
GROUP BY fdate
ORDER BY CONVERT(datetime, fdate) DESC
答案 1 :(得分:2)
如果您正在寻找每个型号的最新数据,那么您可以使用排名功能执行此操作:
WITH CTE
AS
(
SELECT cModel ,fdate, BoardSN,CONVERT(datetime, fdate) AS fdate,
ROW_NUMBER() OVER(PARTITION BY cModel
ORDER BY CONVERT(datetime, fdate) DESC) AS RN
FROM FovComp
)
SELECT TOP 100 cModel ,fdate, BoardSN
FROM CTE
WHERE RN = 1
ORDER BY fdate DESC;
此外,如果您要查找每个型号的前100名,可以使用WHERE RN <= 100
我想COUNT cModel并选择所有列并按
fdate
对其进行分组,然后您就可以执行此操作:
WITH CTE
AS
(
SELECT
fdate,
COUNT(cModel) AS ModelsCount
FROM FovComp
GROUP BY fdate
)
SELECT f.*, c.ModelsCount
FROM FovComp AS f
INNER JOIN CTE AS c ON f.fdate = c.fdate ;
答案 2 :(得分:0)
我认为你需要这个:
SELECT *
FROM
(
SELECT 'ID_1' AS ID, ID_1 AS Value from table1
UNION ALL
SELECT 'ID_2' AS ID, ID_2 AS Value from table1
UNION ALL
SELECT 'ID_3' AS ID, ID_3 AS Value from table1
) AS t1
INNER JOIN Table2 as T2 on T1.ID_1 = T2.ID_1
and T1.ID_2 = T2.ID_2
and T1.ID_3 = T2.ID_3;