首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将支点和聚合结合起来?

问如何将支点和聚合结合起来?
EN

Stack Overflow用户
提问于 2014-05-16 02:04:30
回答 1查看 36关注 0票数 0

下面是我的示例模式和数据(http://sqlfiddle.com/#!3/0d8b7/3/0):

代码语言:javascript
复制
CREATE TABLE cpv
(
  ClientId INT, 
  CodeName VARCHAR(20), 
  Value VARCHAR(30),
  LastModified DATETIME
);

INSERT INTO cpv (ClientId,CodeName,Value,LastModified)
VALUES
(1000, 'PropA', 'A', '2014-05-15 17:02:00'),
(1000, 'PropB', 'B', '2014-05-15 17:01:00'),
(1000, 'PropC', 'C', '2014-05-15 17:01:00'),
(2000, 'PropA', 'D', '2014-05-15 17:02:00'),
(2000, 'PropB', 'E', '2014-05-15 17:05:00');

我需要把它重塑成:

代码语言:javascript
复制
ClientId PropA PropB PropC LastModified
1000     A     B     C     '2014-05-15 17:02:00'
2000     D     E     NULL  '2014-05-15 17:05:00'

这里涉及两项行动:

  • LastModified的聚合-在同一个ClientId中获取最大值
  • 旋转CodeName列

我不知道怎么把它们结合起来。

这个SQL Fiddle演示了CodeName列的旋转:

代码语言:javascript
复制
SELECT PropA,PropB,PropC
FROM (
  SELECT CodeName,Value FROM cpv
) src
PIVOT (
  MAX(Value)
  FOR CodeName IN (PropA,PropB,PropC)
) p

但它不按ClientId分组,也不取LastModified的最大值。

这个SQL Fiddle演示了按ClientId分组和聚合LastModified:

代码语言:javascript
复制
SELECT ClientId,MAX(LastModified) LastModified
FROM cpv
GROUP BY ClientId

但是它完全忽略了名称和值列。

我如何按ClientId分组,如何通过获取组内的最大LastModified进行聚合,以及如何将CodeName列(同样在每个组中)枢轴化?

编辑

答案是可用的这里。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-16 02:23:24

试试这个:

代码语言:javascript
复制
;with cte as
(SELECT ClientID,PropA,PropB,PropC
 FROM (
 SELECT ClientID, CodeName,Value FROM cpv
 ) src
 PIVOT (
 MAX(Value)
 FOR CodeName IN (PropA,PropB,PropC)
 ) p)

SELECT DISTINCT cte.ClientID, PropA, PropB, PropC, MAX(LastModified) OVER(PARTITION BY cte.clientid ORDER BY cte.clientid) MaxLastModified FROM cte
INNER JOIN cpv ON cte.clientid = cpv.clientid

演示这里。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23691539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档