【问题标题】:SQL Grouping rows with the same data in a columnSQL 对列中具有相同数据的行进行分组
【发布时间】:2018-08-14 00:22:05
【问题描述】:

我的数据是什么样的:

同时生成 5 个数据点。我想将所有五个组合成一行。

我尝试使用以下查询:

SELECT 
    DateAndTime as Time, 
    (SELECT Val WHERE TagIndex = 0) as Normalized_Vac,
    (SELECT Val WHERE TagIndex = 1) as Avgerage_Vac,
    (SELECT Val WHERE TagIndex = 2) as RAL_ACT,
    (SELECT Val WHERE TagIndex = 3) as RAL_CMD,
    (SELECT Val WHERE TagIndex = 4) as PPH_weight
FROM 
    Line_32_floats
GROUP BY
    DateAndTime;

但我得到了错误:

列 'Line_32_floats.TagIndex' 在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    我建议条件聚合:

    SELECT DateAndTime as Time, 
           MAX(CASE WHEN TagIndex = 0 THEN Val END) as Normalized_Vac,
           MAX(CASE WHEN TagIndex = 1 THEN Val END) as Avgerage_Vac,
           MAX(CASE WHEN TagIndex = 2 THEN Val END) as RAL_ACT,
           MAX(CASE WHEN TagIndex = 3 THEN Val END) as RAL_CMD,
           MAX(CASE WHEN TagIndex = 4 THEN Val END) as PPH_weight
    FROM Line_32_floats f 
    GROUP BY DateAndTime;
    

    【讨论】:

      【解决方案2】:

      你需要条件聚合:

      SELECT DateAndTime, 
            MAX(CASE WHEN TagIndex = 0 THEN Val END),
             . . . 
      FROM Line_32_floats
      GROUP BY DateAndTime;
      

      【讨论】:

        【解决方案3】:

        这是我如何使用 PIVOT 进行操作的示例:

        SELECT DateandTime, [0], [1], [2], [3], [4]
        FROM 
        (SELECT DateandTime, TagIndex, Val 
         FROM Line_32_floats WHERE DateandTime = '2018-08-09') as source_table
        PIVOT
        (
          MAX(Val)
          FOR TagIndex IN ([0], [1], [2], [3], [4])
        ) as pivot_table
        

        您可以在此处访问有效的 SQL Fiddle:http://sqlfiddle.com/#!18/2106c/3/0

        由于您希望在一行中,我假设您还对列 Val 的不同值进行了分组,在这种情况下我将其视为 MAX

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多