【问题标题】:How to combine multiple rows from the same column that have the same data?如何合并同一列中具有相同数据的多行?
【发布时间】:2013-10-11 14:31:12
【问题描述】:

我的代码是:

SELECT datepart(year, request_created_date) AS request_year,
    datepart(month, request_created_date) AS request_month,
    datepart(week, request_created_date) AS request_week,
    count(request_id) AS request_count
FROM nyc311_requests
GROUP BY request_created_date
ORDER BY request_week

在我得到的输出中,我有两行 request_week 是 36 和 7 行是 37。我想要的是将这样的列组合成一行。

【问题讨论】:

  • 您是否尝试过将您的 GROUP BY 更改为 GROUP BY datepart(week, request_created_date)
  • 是的,但我收到一条错误消息,指出 request_created_date 无效,因为它不是聚合或在 GROUP BY 子句中。
  • 下面的怎么样:GROUP BY datepart(year, request_created_date), datepart(month, request_created_date), datepart(week, request_created_date)

标签: sql sql-server sql-server-2008 subquery


【解决方案1】:

如果您要使用 GROUP BY 子句,则必须在 GROUP BY 中包含除计算字段之外的所有字段:

SELECT datepart(year, request_created_date) AS request_year,
    datepart(month, request_created_date) AS request_month,
    datepart(week, request_created_date) AS request_week,
    count(request_id) AS request_count
FROM nyc311_requests
GROUP BY datepart(year, request_created_date),
    datepart(month, request_created_date),
    datepart(week, request_created_date)
ORDER BY request_week

或者,如果您想要更简洁的查询:

SELECT M.*, count(*) AS request_count FROM 
(
  SELECT datepart(year, request_created_date) AS request_year,
         datepart(month, request_created_date) AS request_month,
         datepart(week, request_created_date) AS request_week
  FROM nyc311_requests
)AS M
GROUP BY M.request_year, M.request_month, M.request_week
ORDER BY M.request_week

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2013-12-08
    • 2021-03-06
    • 1970-01-01
    • 2017-01-08
    相关资源
    最近更新 更多