zoukankan      html  css  js  c++  java
  • 一个奇葩的SQL

    需求

    建表脚本

     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

    调用 存储过程

    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表关联  然后在透视转换回来就可以 了。

  • 相关阅读:
    Spring Boot集成Spring Security
    vue全局使用axios的方法
    在SpringBoot 使用Redis存储Session
    SpringBoot几种定时任务的实现方式
    mysql重置auto_increment字段
    iView中DatePicker的表单验证问题
    go语言基础(四)
    go语言基础(三)
    go语言基础(二)
    go语言基础(一)
  • 原文地址:https://www.cnblogs.com/gates/p/5422497.html
Copyright © 2011-2022 走看看