【问题标题】:Add columns from different rows添加来自不同行的列
【发布时间】:2021-06-08 14:16:05
【问题描述】:

这是我原来的桌子。我想在 1995 年到 1997 年之间插入 TempAvg 来表示一年中的所有日期。

此数据具有相同的日期和月份,但年份不同。详情见下图:

【问题讨论】:

  • 可以像这样发布您的数据图像。这让我们很难为您提供帮助,从而使您获得好的答案的可能性大大降低。此外,Output 图像没有显示足够的细节,我们无法推断您需要什么。
  • 与原始字段相比,数据是什么?
  • 不要将日期存储为单独的日/月/年字段,请使用 date 数据类型。
  • 我建议您阅读Asking 上的帮助部分,特别是How to AskHow to create a Minimal, Reproducible Example。对于数据库问题,包含表字段的数据类型很重要。
  • 对不起。我要加这些数据不加。

标签: sql sql-server database


【解决方案1】:

对于您的 SELECT 语句,您可以忽略 WHERE 子句中的日/月:

SELECT [day], [month], [TempTarget]
FROM YourTable
WHERE [year] = 1995
OR [year] = 1997
ORDER BY [month], [day]

【讨论】:

    【解决方案2】:

    我想我理解你的问题,你有两年(1995 年和 1997 年)的温度数据,你想知道这些年每一天的平均温度差异。

    我不知道您为什么要添加图表中显示的两个平均温度,因为您的字段标题暗示您想要差异,这意味着从另一个中减去一个,但我会使用你图片中的计算。

    您没有说数据是在同一个表中还是在不同的表中,所以我假设它在同一个表中,这意味着您需要在日/月加入的派生表:

    SELECT data1.Day, data1.Month, data1.TempAvg + data2.TempAvg as TempAvgDiff
    FROM
      (SELECT Day, Month, TempAvg FROM data WHERE Year = 1995) as data1
    INNER JOIN
      (SELECT Day, Month, TempAvg FROM data WHERE Year = 1997) as data2
    ON data1.Day = data2.Day AND data1.Month = data2.Month
    

    如果您的数据位于单独的表中,请将派生表 data1data2 替换为您的两个表的名称。您还必须将字段名称 daymonthyear 放在引号或括号中,因为它们是 SQL 中的关键字。

    【讨论】:

      【解决方案3】:

      图片中的输出是对不同年份的 TempAvg 列求和,并将其标记为“TempAvgDiff”。看来您正在寻找类似的东西

      select [Day], [Month], sum(TempAvg) TempAvgDiff
      from TableWithTemps
      where [Year] between 1995 and 1997
      group by [Day], [Month]
      order by [Day], [Month];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        相关资源
        最近更新 更多