--建立测试环境
Create Table 表(投诉记录号 varchar(10),接警类型 varchar(10),城区名称 varchar(10))
--插入数据
insert into 表
select '00','环保投诉','江岸区' union
select '12','环保投诉','江汉区' union
select '13','环保投诉','武昌区' union
select '25','工商投诉','江岸区' union
select '30','工商投诉','江汉区' union
select '45','工商投诉','武昌区' union
select '20','公安投诉','江岸区' union
select '25','公安投诉','江汉区' union
select '5','公安投诉','武昌区' --select * from 表
--测试语句
 --动态查询 
DECLARE @SQL VARCHAR(8000) 
SET @SQL='SELECT 接警类型' 
SELECT @SQL= @SQL+ ',max(CASE WHEN 城区名称 = ''' + 城区名称 + ''' THEN 投诉记录号 END) [' + 城区名称 + '电量] ' 
FROM (SELECT DISTINCT 城区名称 FROM 表) A 
SET @SQL=@SQL+ ' FROM 表 GROUP BY 接警类型' 
EXEC (@SQL)  
--删除测试环境
Drop Table 表/*--测试结果接警类型       江岸区电量      江汉区电量      武昌区电量      
---------- ---------- ---------- ---------- 
工商投诉       25         30         45
公安投诉       20         25         5
环保投诉       00         12         13
--*/

解决方案 »

  1.   

    还要建表干什么?我就是想通过这个视图得到那个交叉表并在dataGrid上显示出来
      

  2.   

    DECLARE @SQL VARCHAR(8000) 
    SET @SQL='SELECT 接警类型' 
    SELECT @SQL= @SQL+ ',max(CASE WHEN 城区名称 = ''' + 城区名称 + ''' THEN 投诉记录号 END) [' + 城区名称 + '电量] ' 
    FROM (SELECT DISTINCT 城区名称 FROM 表) A 
    SET @SQL=@SQL+ ' FROM 表 GROUP BY 接警类型' 
    EXEC (@SQL) 
    这个能解释一下吗?
      

  3.   

    拼一段动态的sql语句然后执行,主要就是用case when
      

  4.   

    谢谢你, jinjazz(近身剪(充电中...))!