下面是我的示例模式和数据(http://sqlfiddle.com/#!3/0d8b7/3/0):
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');我需要把它重塑成:
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'这里涉及两项行动:
我不知道怎么把它们结合起来。
这个SQL Fiddle演示了CodeName列的旋转:
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:
SELECT ClientId,MAX(LastModified) LastModified
FROM cpv
GROUP BY ClientId但是它完全忽略了名称和值列。
我如何按ClientId分组,如何通过获取组内的最大LastModified进行聚合,以及如何将CodeName列(同样在每个组中)枢轴化?
编辑
答案是可用的这里。
发布于 2014-05-16 02:23:24
试试这个:
;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演示这里。
https://stackoverflow.com/questions/23691539
复制相似问题