我希望在每个主键(本例中为A)上对表进行子集化,然后为每个剩余列获得快速分布(在这种情况下,COL1:2T,1Y,1E和COL2:3Z,1B ),然后重复每个主键。
P C1 C2
A T Z
A T Z
A Y Z
A E B
B W M
B W M
这可以在SQL中做(我目前使用的是WPS SQL)吗?是否可以遍历每个主键,然后查看结果,以获得以下内容:
P C1 C2
A 2T,1Y,1E 3Z,1B
B 2W 2M
...
请注意,我的数据有~10k个唯一主键和180列
答案 0 :(得分:0)
你可以使用它。
DECLARE @Temp TABLE (P VARCHAR(5), C1 VARCHAR(5), C2 VARCHAR(5))
INSERT INTO @Temp VALUES
('A','T','Z'),
('A','T','Z'),
('A','Y','Z'),
('A','E','B'),
('B','W','M'),
('B','W','M')
SELECT T.P,
STUFF(X1.C1,1,1,'') C1,
STUFF(X2.C2,1,1,'') C2
FROM
(SELECT DISTINCT P FROM @Temp) AS T
CROSS APPLY (SELECT ',' + CONVERT(VARCHAR,COUNT(*)) + C1
FROM @Temp T1
WHERE T.P = T1.P
GROUP BY C1
ORDER BY COUNT(*) DESC
FOR XML PATH('')) AS X1 (C1)
CROSS APPLY (SELECT ',' + CONVERT(VARCHAR,COUNT(*)) + C2
FROM @Temp T2
WHERE T.P = T2.P
GROUP BY C2
ORDER BY COUNT(*) DESC
FOR XML PATH('')) AS X2 (C2)
结果
P C1 C2
----- -------------- ----------
A 2T,1Y,1E 3Z,1B
B 2W 2M