22,302
社区成员




WITH
...
,D AS ( -- 再加一个行转列
SELECT [1] AS [第一],
[2] AS [第二],
[3] AS [第三],
[4] AS [第四]
FROM (
SELECT falarm,
ROW_NUMBER() OVER(ORDER BY 个数 DESC) rn
FROM a
) t
PIVOT (MAX(falarm)
FOR rn IN ([1],[2],[3],[4])
) p
)
SELECT * -- 自己根据需要选取/合并c、d的字段
FROM b,c,d
姓名 电话 第一 第二 第三 第四 总数 第一 第二 第三 第四
---- ----------- ----------- ----------- ----------- ----------- ----------- ---- ---- ---- ----
张三 12345678 7 5 4 3 19 -ab -ac -bc -dc
WITH /* 测试数据
A(falarm,个数)AS(
SELECT '-ab',7 UNION ALL
SELECT '-ac',5 UNION ALL
SELECT '-bc',4 UNION ALL
SELECT '-dc',3 UNION ALL
SELECT '-be',1
)
,B(姓名,电话)AS(
SELECT '张三',12345678
), */
C AS (
SELECT [1] AS [第一],
[2] AS [第二],
[3] AS [第三],
[4] AS [第四],
[1]+[2]+[3]+[4] AS [总数]
FROM (
SELECT 个数,
ROW_NUMBER() OVER(ORDER BY 个数 DESC) rn
FROM a
) t
PIVOT (MAX(个数)
FOR rn IN ([1],[2],[3],[4])
) p
)
SELECT *
FROM b,c
姓名 电话 第一 第二 第三 第四 总数
---- ----------- ----------- ----------- ----------- ----------- -----------
张三 12345678 7 5 4 3 19