【问题标题】:Grouping and aggregating field in single SQL query单个 SQL 查询中的分组和聚合字段
【发布时间】:2014-09-19 17:48:14
【问题描述】:

我有一张桌子,布局如下:

表名:事务

transactionId | accountId | technology
--------------------------------------
1             | 1         | mac
2             | 1         | linux
3             | 2         | pc
4             | 3         | linux
5             | 2         | pc
6             | 3         | linux
...

我想生成以下格式的报告

accountId | num. pc | num. mac | num. linux
-------------------------------------------
1         | 1       | 1        | 0         
2         | 1       | 0        | 1
3         | 0       | 0        | 2
...

我不是 SQL 专家,但我觉得我应该能够使用 GROUP BY 子句来生成这些结果。是否可以在单个查询中生成此结果集?我目前使用的是 MS SQL Server 2008,所以 T-SQL 可以工作。

谢谢!!

【问题讨论】:

  • 等等。您是否要求重新生成一个看起来像这样的新表?或者结果查询以这种格式出现?
  • 对不起,我应该更明确一点。我正在寻找生成该结果集的查询。
  • 技术字段是否总是被限制为这三个值?
  • Pivot 在这种情况下应该工作得更好。
  • @AHiggins 是的,或多或少。可能会添加新技术,但我应该能够更新查询。

标签: sql sql-server database tsql relational-database


【解决方案1】:

你可以试试这样的

SELECT
   accountId ,
   [num. pc] = SUM(CASE WHEN  technology = 'pc' THEN 1 ELSE 0 END),
   [num. mac] = SUM(CASE WHEN  technology = 'mac' THEN 1 ELSE 0 END),
   [num. linux] = SUM(CASE WHEN  technology = 'linux' THEN 1 ELSE 0 END)
FROM YourTable
GROUP BY accountId 

【讨论】:

  • 如果您使用此代码,我建议您添加一个“其他”存储桶来捕获此列表中未包含的任何技术。
  • 这就是我要找的!谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多