SQL交叉表執行個體

來源:互聯網
上載者:User
著作權聲明:CSDN是本Blog託管服務提供者。如本文牽涉著作權問題,CSDN不承擔相關責任,請著作權擁有者直接與文章作者聯絡解決。



SQL交叉表執行個體

很簡單的一個東西,見網上好多朋友問“怎麼實現交叉表?”,以下是我寫的一個例子,資料庫基於SQL SERVER 2000。

-- ======================================================

--交叉表執行個體

-- ======================================================

建表:

在查詢分析器裡運行:

CREATE TABLE [Test] (

       [id] [int] IDENTITY (1, 1) NOT NULL ,

       [name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,

       [subject] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,

       [Source] [numeric](18, 0) NULL

) ON [PRIMARY]

GO

INSERT INTO [test] ([name],[subject],[Source]) values (N'張三',N'語文',60)

INSERT INTO [test] ([name],[subject],[Source]) values (N'李四',N'數學',70)

INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'英語',80)

INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'數學',75)

INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'語文',57)

INSERT INTO [test] ([name],[subject],[Source]) values (N'李四',N'語文',80)

INSERT INTO [test] ([name],[subject],[Source]) values (N'張三',N'英語',100)

Go

 

450)this.width=450" o:title="sql2">

交叉表語句的實現:

--用於:交叉表的列數是確定的

select name,sum(case subject when '數學' then source else 0 end) as '數學',

          sum(case subject when '英語' then source else 0 end) as '英語',

            sum(case subject when '語文' then source else 0 end) as '語文'

from test

group by name

 

 

--用於:交叉表的列數是不確定的

declare @sql varchar(8000)

set @sql = 'select name,'

 

select @sql = @sql + 'sum(case subject when '''+subject+'''

                          then source else 0 end) as '''+subject+''','

  from (select distinct subject from test) as a

 

select @sql = left(@sql,len(@sql)-1) + ' from test group by name'

exec(@sql)

go

 

運行結果:

450)this.width=450" o:title="sql">


相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。