【问题标题】:How to select DateTime , INT , FLOAT columns when we do group by in SQL Server?在 SQL Server 中进行分组时如何选择 DateTime 、 INT 、 FLOAT 列?
【发布时间】:2018-03-28 05:41:15
【问题描述】:

Microsoft SQL Server 2014 - 12.0.2000.8 (X64) 2014 年 2 月 20 日 20:04:26 版权所有 (c) Microsoft Corporation Developer Edition(64 位) Windows NT 6.3 (Build 9600: ) (Hypervisor)

我有一个view,我正在为 4 列执行group by。我的要求是在组完成后显示第一行数据。 我们已经为所有VARCHAR 数据类型列使用了max(Column),但这不适用于DATETIMEINTFLOAT。 在DATETIMEINTFLOAT 类型的列中,我们还需要第一行数据。

我能知道这是怎么做到的吗?

Example:ID(PK)  C1  C2  C3  C4  C5
           1    2   x   y   100 20
           2    2   x   q   200 50
           3    2   y   f   300 70
           4    2   y   g   500 10
           5    8   g   h   200 30
           6    8   g   j   400 60

Required O/P    1   2   x   y   100 70
                3   2   y   f   300 80
                5   8   g   h   200 90   

【问题讨论】:

  • 列名和表名是什么?另外,当你说你想要“第一”行时,应该如何确定第一行(排序顺序是什么)?

标签: sql-server


【解决方案1】:

您的示例数据似乎暗示以下查询可能有效:

SELECT
    ID, col1, col2, col3, col4, col5, c5_sum
FROM
(
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY ID) rn,
        SUM(col5) OVER (PARTITION BY col1) c5_sum
    FROM yourTable
) t
WHERE rn = 1;

这假定col1 是分组列,ID 用于对组内的记录进行排序,并且您要取col5 的总和。

【讨论】:

  • 其实我们还需要对一些列进行求和。上述代码是否适用于上述场景。 1,'x','y','z',200,50 1,'r','k','z',200,40 输出应为:1,'a','b','c ',100,110
  • @AshwiniK 编辑您的问题,添加真实样本数据,然后告诉我们您的实际问题是什么。我已经回答了你现在的问题。
  • C0(PK) C1 C2 C3 C4 C5 1 2 x y 100 20 2 2 p q 200 50 3 2 d f 300 70 4 8 g h 200 10 5 8 i j 400 60 需要 O/ P 1 2 x y 100 140 4 8 g h 200 70
  • @AshwiniK 我已经两次回答了你的问题。如果您发布的内容不是您的实际要求,那么您应该打开一个新问题。我不会做进一步的更新。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
相关资源
最近更新 更多