现有表A
falarm 个数
-ab 7
-ac 5
-bc 4
-dc 3
-be 1
把表A中个数的前四名放到表B 得到的结果为(姓名, 电话可以从另一张表C中得到):
姓名 电话 第一 第二 第三 第四 总数
... ..... 7 5 4 3 19
我是刚接触sql 谢谢了
------解决思路----------------------
CREATE TABLE #t
(
falarm VARCHAR(30),
Number int
)
INSERT INTO #t
SELECT '-ab',7 UNION ALL
SELECT '-ac',5 UNION ALL
SELECT '-bc',4 UNION ALL
SELECT '-dc',3 UNION ALL
SELECT '-be',1
declare @s varchar(max)
set @s='select falarm'
SELECT @s=@s+','+
+case when QUOTENAME(falarm)='[-ab]' THEN '''第一'''
when QUOTENAME(falarm)='[-ac]' THEN '''第二'''
when QUOTENAME(falarm)='[-bc]' THEN '''第三'''
when QUOTENAME(falarm)='[-dc]' THEN '''第四'''
end
+N'=SUM(CASE falarm WHEN '+QUOTENAME(falarm,N'''')
+N' THEN Number END)'
FROM (SELECT TOP 4* FROM #t t
ORDER BY t.Number desc)a
print(@s+N'
FROM (SELECT TOP 4 * FROM #t t
ORDER BY t.Number desc)a
group by falarm')
------解决思路----------------------
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