熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

詳細介紹SQL交叉表的實例

2013-11-15 14:43:10  來源: SQL Server 

  很簡單的一個東西見網上好多朋友問怎麼實現交叉表?以下是我寫的一個例子數據庫基於SQL SERVER
  
  交叉表實例
  
  建表
  
  在查詢分析器裡運行
  
  CREATE TABLE [Test] (
  
  [id] [int] IDENTITY ( ) NOT NULL
  
  [name] [nvarchar] () COLLATE Chinese_PRC_CI_AS NULL
  
  [subject] [nvarchar] () COLLATE Chinese_PRC_CI_AS NULL
  
  [Source] [numeric]( ) NULL
  
  ) ON [PRIMARY]
  
  GO
  
  INSERT INTO [test] ([name][subject][Source]) values (N張三N語文)
  
  INSERT INTO [test] ([name][subject][Source]) values (N李四N數學)
  
  INSERT INTO [test] ([name][subject][Source]) values (N王五N英語)
  
  INSERT INTO [test] ([name][subject][Source]) values (N王五N數學)
  
  INSERT INTO [test] ([name][subject][Source]) values (N王五N語文)
  
  INSERT INTO [test] ([name][subject][Source]) values (N李四N語文)
  
  INSERT INTO [test] ([name][subject][Source]) values (N張三N英語)
  
  Go
  
 

  交叉表語句的實現
  
  用於交叉表的列數是確定的
  
  select namesum(case subject when 數學 then source else end) as 數學
  
  sum(case subject when 英語 then source else end) as 英語
  
  sum(case subject when 語文 then source else end) as 語文
  
  from test
  
  group by name
  
  用於交叉表的列數是不確定的
  
  declare @sql varchar()
  
  set @sql = select name
  
  select @sql = @sql + sum(case subject when +subject+
  
  then source else end) as +subject+
  
  from (select distinct subject from test) as a
  
  select @sql = left(@sqllen(@sql)) + from test group by name
  
  exec(@sql)
  
  go
  
  運行結果
  


From:http://tw.wingwit.com/Article/program/SQLServer/201311/22229.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.