【问题标题】:TSQL return multiple column for each row of data based on different columnsTSQL根据不同的列为每行数据返回多列
【发布时间】:2018-08-03 17:03:12
【问题描述】:

我有一张[MemoryValue],[ServerName],[ServerType],[CreateDate] 的桌子。 我想在 Grafana 中显示 ServerName 和 ServerType 的每个组合的 MemoryValue。基本上每个 ServerName 和 ServerType 组合都有不同的图表。例如

MemoryValue ServerName  ServerType
15757746    bob         type1   
182         bob         type2   
8           bob         type3
15757746    bob2        type1   
182         bob2        type2   
8           bob2        type3

我希望每个 ServerName+ServerType 有 6 个图表来显示 MemoryValue。

当我尝试时

select MemoryValue ,  CreateDate  as time
    from table
    group by ServerName, ServerType

它有错误“在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。”。当我尝试将 MemoryValue 添加到 GROUP BY 时,该图并不能反映我想要的内容,并且它显示单个图与多个图相反。

我希望每个 CreateDate 的 MemoryValue 由每个 ServerName 和 ServerType 分隔,看起来像这样

【问题讨论】:

  • 用您想要的结果编辑问题。
  • 聚合时..您只能有参与分组的列或...它们必须被包装在聚合函数中(即 sum、min、max、count 等) 在 SELECT 子句中。
  • 我想那时我不能使用 GROUP BY。我怎样才能 MemoryValue per CreateDate 由每个 ServerName 和 ServerType 分隔,看起来像上图
  • 一些有意义的样本数据和您想要的输出(来自查询,而不是图表的图片)将大大有助于我们帮助您。这里有一些很好的建议和工具:spaghettidba.com/2015/04/24/…

标签: sql sql-server tsql grafana


【解决方案1】:

你想要这样的东西:

select MAX(MemoryValue) as mem ,  MAX(CreateDate)  as time
    from table
    group by ServerName, ServerType

将 MAX 更改为您想要的任何聚合(AVG、SUM 等)

【讨论】:

  • 我也想要每次的内存值。 MAX 查询不会每次显示内存值。 This is what it looks like
  • 然后按 MemoryValue 分组,只聚合 CreateDate 列
【解决方案2】:

这就是你要找的吗? STRING_AGG 是在 SQL Server 2017 中引入的。

CREATE TABLE #Tmp (
    MemoryValue INT,
    ServerName VARCHAR(100),
    ServerType VARCHAR(100)
)
GO
INSERT INTO #Tmp (MemoryValue,ServerName,ServerType)
VALUES (15757746,'bob','type1'),(182,'bob','type2'),(8,'bob','type3'),(15757746,'bob2','type1'),(182,'bob2','type2'),(8,'bob2','type3')
GO

SELECT ServerType, string_agg(ServerName,','), MAX(MemoryValue)
FROM #Tmp
GROUP BY ServerType
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多