一個奇葩的SQL

需求sql

建表腳本spa

 1 CREATE TABLE [dbo].[A](
 2     [dm] [varchar](5) NOT NULL,
 3     [dmmc] [varchar](20) NULL
 4 ) ON [PRIMARY]
 5 
 6 GO
 7 CREATE TABLE [dbo].[B](
 8     [xh] [varchar](5) NOT NULL,
 9     [km01] [varchar](25) NULL,
10     [km02] [varchar](25) NULL,
11     [km03] [varchar](25) NULL
12 ) ON [PRIMARY]

 

 

 

 1 USE [test]
 2 GO
 3 /****** Object:  StoredProcedure [dbo].[sp_pivotA]    Script Date: 2016/4/22 19:07:47 ******/
 4 SET ANSI_NULLS ON
 5 GO
 6 SET QUOTED_IDENTIFIER ON
 7 GO
 8  
 9 ALTER PROCEDURE [dbo].[sp_pivotA] 
10  
11 AS
12 BEGIN 
13     SET NOCOUNT ON;
14     declare @sql varchar(8000) 
15      select @sql=   LEFT(t,LEN(t)-1)
16      from
17      (
18      SELECT  distinct  ( select  '['+dm+'],'   from A FOR XML PATH('') )as t   from A as d  
19      )e
20      declare @sql2 varchar(8000) 
21      set @sql2='SELECT ''學號'' as''xh'',* 
22 
23     FROM A
24     pivot(MAX(A.dmmc) FOR dm IN('+@sql+') )as P'
25  
26       exec(@sql2)
27 END

 

調用 存儲過程code

1 DROP TABLE #tmp1
2  go
3  select * into #tmp1 from B where 1=2
4  insert INTO #tmp1 EXEC [dbo].[sp_pivotA]
5 
6  select * from #tmp1
7   union all
8   select * from B

 

 

若是想讓km01,...顯示成中文名稱,也就是列名顯示成第一行的那些中文,也能夠 把B表先逆透視轉換一下  而後去跟A表關聯  而後在透視轉換回來就能夠 了。blog

相關文章
相關標籤/搜索