表内有如下信息
Pname Pmonth Prate*100
预算管控系统建置 1 0
BPM导入 1 0
投资支出及回收申请单 1 0
教育訓練 1 0
行政會議 1 0
其他 1 0
部门 1 0
BPM导入 1 1
预算管控系统建置 1 1
行政會議 1 1.85
其他 1 2
教育訓練 1 3.66
部门 1 25.55
投资支出及回收申请单 1 64.93
BPM导入 2 0
行政會議 2 0
休假 2 0
部门 2 0
BPM导入 2 1.04
行政會議 2 4.69
休假 2 25
部门 2 69.27
工时管理系统 3 0
投资支出及回收申请单 3 0
行政會議 3 0
部门 3 0
行政會議 3 6.67
部门 3 11.11
工时管理系统 3 35.56
投资支出及回收申请单 3 46.67
怎么查询才能有如下 效果
Pname 1月 2月 3月
预算管控系统建置 1 0 0
BPM导入 1 1.04 0
投资支出及回收申请单 64.93 0 46.67
工时管理系统 0 0 35.56
行政會議 1.85 4.69 6.67
休假 0 25 0
部门 25.55 69.27 11.11
其他 2 0 0
教育訓練 3.66 0 0
------解决思路----------------------
--动态TB换成你的表名
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT Pname'
SELECT @SQL=@SQL+'
,ISNULL(SUM(CASE WHEN Pmonth='+CAST(Pmonth AS VARCHAR(10))+' THEN [Prate*100] END),0)['+CAST(Pmonth AS VARCHAR(10))+'月]'
FROM TB GROUP BY Pmonth ORDER BY Pmonth
SET @SQL=@SQL+'FROM TB GROUP BY Pname'
PRINT @SQL
EXEC(@SQL)
--静态方式
SELECT Pname
,ISNULL(SUM(CASE WHEN Pmonth=1 THEN [Prate*100] END),0)[1月]
,ISNULL(SUM(CASE WHEN Pmonth=2 THEN [Prate*100] END),0)[2月]
,ISNULL(SUM(CASE WHEN Pmonth=3 THEN [Prate*100] END),0)[3月]
FROM TB
GROUP BY Pname
------解决思路----------------------
又是行转列~~~用PIVOT,2000的话只能CASE GROUP
------解决思路----------------------
网上太多,自己去尝试写写印象会更深刻
------解决思路----------------------
才40分,真小气,我上次问直接88。
