• 行转列之后的datagrid的保存


    行专列之后,查询的存储过程为

      1 USE [APS_Future_FT]
      2 GO
      3 /****** Object:  StoredProcedure [dbo].[P_APS_H_InternalStandardCrudePrice]    Script Date: 2013/11/7 21:27:23 ******/
      4 SET ANSI_NULLS ON
      5 GO
      6 SET QUOTED_IDENTIFIER ON
      7 GO
      8 -- =============================================
      9 -- Author:        <Author,,Name>
     10 -- Create date: <Create Date,,>
     11 -- Description:    <Description,,>
     12 -- =============================================
     13 ALTER PROCEDURE [dbo].[P_APS_H_InternalStandardCrudePrice]
     14     (
     15       @PageSize INT ,
     16       @PageIndex INT ,
     17       @BeginDate DATETIME ,
     18       @EndDate DATETIME ,
     19       @TotalCount INT OUTPUT 
     20     )
     21 AS 
     22     BEGIN
     23 
     24         SET NOCOUNT ON;
     25         ---------------------------------------------------------
     26         SET @TotalCount=0
     27 
     28         SELECT  thi.CrudeStandardPriceID ,
     29                 vab.Name ,
     30                 vab.Code ,
     31                 thi.CrudeStandardPrice ,
     32                 thi.CreateDate ,
     33                 CONVERT(VARCHAR(10), PriceDate, 120) AS PriceDate
     34         INTO    #A
     35         FROM    T_H_InternalStandardCrudePrice thi ,
     36                 dbo.V_APS_BaseDataUnion vab
     37         WHERE   thi.CrudeStandard = vab.Code
     38                 AND thi.PriceDate BETWEEN @BeginDate AND @EndDate
     39         ORDER BY thi.PriceDate ASC
     40         ----------------------------------------------------------
     41         DECLARE @i INT
     42         SET @i = 0
     43         
     44         SELECT  @i = ( SELECT   COUNT(*)
     45                        FROM     #A
     46                      )
     47         IF ( @i > 0 ) 
     48             BEGIN
     49         --读取动态列
     50                 DECLARE @STR NVARCHAR(MAX);
     51                 SELECT  @STR = ( SELECT DISTINCT
     52                                         '[' + Code + '],'
     53                                  FROM   #A
     54                                FOR
     55                                  XML PATH('')
     56                                )
     57                 SELECT  @STR = SUBSTRING(@STR, 1, LEN(@STR) - 1)
     58          
     59                 DECLARE @ESTR NVARCHAR(MAX)
     60       
     61         -------------------------------------------------------------
     62         --行转列
     63                 SET @ESTR = 'select rn=row_number()over (order by PriceDate desc),PriceDate,'
     64                     + @STR + '
     65         FROM    ( SELECT    
     66                             Code ,
     67                             CrudeStandardPrice ,
     68                             PriceDate
     69                   FROM      #A 
     70                 ) AS A PIVOT ( SUM(A.CrudeStandardPrice) FOR A.Code IN ('
     71                     + @STR + ' ) ) AS B '
     72 
     73        -- SET @ESTR = 'select * 
     74        -- FROM    ( SELECT    
     75        --                     Code ,
     76        --                     CrudeStandardPrice ,
     77                             --PriceDate
     78        --           FROM      #A
     79        --         ) AS A PIVOT ( SUM(A.CrudeStandardPrice) FOR A.Code IN ('
     80        --     + @STR + ' ) ) AS B'
     81         ---------------------------------------------------------------
     82         --查询总记录数
     83          
     84                 DECLARE @sql NVARCHAR(MAX)
     85                 SET @sql = 'select * into ##C from (' + @ESTR + ') as C'
     86        
     87                 EXEC(@sql)
     88 
     89                 SELECT  @TotalCount = ( SELECT  COUNT(*)
     90                                         FROM    ##C
     91                                       )
     92                 DROP TABLE ##C
     93         ----------------------------------------------------------------
     94         --增加分页
     95                 SET @ESTR = 'select * from (' + @ESTR
     96                     + ') as C where rn BETWEEN '
     97                     + CAST(( ( @PageIndex ) * @PageSize + 1 ) AS NVARCHAR(20))
     98                     + ' and  '
     99                     + CAST(( ( @PageIndex + 1 ) * @PageSize ) AS NVARCHAR(20))
    100                     + ' '
    101 
    102                 EXEC (@ESTR)
    103         -------------------------------------------------------------
    104             END
    105         DROP TABLE #A
    106         
    107     END

    xml文件为

    <data><row id="14" code="93_06" value="100" state="added"  rowid="1" /><row id="14" code="name" value="New Row" state="added"  rowid="2" /><row id="14" code="_uid" value="14" state="added"  rowid="3" /><row id="14" code="93_11" value="100" state="added"  rowid="4" /><row id="14" code="93_10" value="100" state="added"  rowid="5" /><row id="14" code="93_09" value="100" state="added"  rowid="6" /><row id="14" code="93_08" value="100" state="added"  rowid="7" /><row id="14" code="93_12" value="100" state="added"  rowid="8" /><row id="14" code="93_03" value="100" state="added"  rowid="9" /><row id="14" code="93_02" value="210" state="added"  rowid="10" /><row id="14" code="93_01" value="120" state="added"  rowid="11" /><row id="14" code="93_07" value="100" state="added"  rowid="12" /><row id="14" code="PriceDate" value="2013/11/1 0:00:00" state="added"  rowid="13" /><row id="14" code="_id" value="14" state="added"  rowid="14" /><row id="14" code="93_04" value="100" state="added"  rowid="15" /><row id="14" code="93_05" value="100" state="added"  rowid="16" /><row id="14" code="_state" value="added" state="added"  rowid="17" /><row id="11" code="rn" value="1" state="modified"  rowid="1" /><row id="11" code="_uid" value="11" state="modified"  rowid="2" /><row id="11" code="93_12" value="200" state="modified"  rowid="3" /><row id="11" code="93_11" value="200" state="modified"  rowid="4" /><row id="11" code="93_10" value="200" state="modified"  rowid="5" /><row id="11" code="93_06" value="200" state="modified"  rowid="6" /><row id="11" code="93_09" value="200" state="modified"  rowid="7" /><row id="11" code="93_08" value="200" state="modified"  rowid="8" /><row id="11" code="93_03" value="200" state="modified"  rowid="9" /><row id="11" code="93_02" value="200" state="modified"  rowid="10" /><row id="11" code="93_01" value="200" state="modified"  rowid="11" /><row id="11" code="93_07" value="200" state="modified"  rowid="12" /><row id="11" code="PriceDate" value="2013-10-28" state="modified"  rowid="13" /><row id="11" code="93_05" value="200" state="modified"  rowid="14" /><row id="11" code="93_04" value="200" state="modified"  rowid="15" /><row id="11" code="_id" value="11" state="modified"  rowid="16" /><row id="11" code="_state" value="modified" state="modified"  rowid="17" /></data>

    存储过程为

      1 USE [APS_Future_FT]
      2 GO
      3 /****** Object:  StoredProcedure [dbo].[A_001]    Script Date: 2013/11/7 19:23:03 ******/
      4 SET ANSI_NULLS ON
      5 GO
      6 SET QUOTED_IDENTIFIER ON
      7 GO
      8 -- =============================================
      9 -- Author:        <Author,,Name>
     10 -- Create date: <Create Date,,>
     11 -- Description:    <Description,,>
     12 -- =============================================
     13 ALTER PROCEDURE [dbo].[A_001] ( @str XML )
     14 AS 
     15     BEGIN
     16     -- SET NOCOUNT ON added to prevent extra result sets from
     17     -- interfering with SELECT statements.
     18         SET NOCOUNT ON;
     19         
     20         DECLARE @T TABLE
     21             (
     22               T_id NVARCHAR(50) ,
     23               T_code NVARCHAR(50) ,
     24               T_value NVARCHAR(50) ,
     25               T_state NVARCHAR(50)
     26             )      
     27 
     28         INSERT  INTO @T
     29                 ( T_id ,
     30                   T_code ,
     31                   T_value ,
     32                   T_state 
     33                 )
     34                 SELECT  T.r.value('@id', 'nvarchar(50)') ,
     35                         T.r.value('@code', 'nvarchar(50)'),
     36                         T.r.value('@value','nvarchar(50)'),
     37                         T.r.value('@state','nvarchar(50)')
     38                 FROM    @str.nodes('/data/row') T ( r )     
     39                 
     40 
     41         
     42         SELECT DISTINCT *
     43         INTO #Date
     44         FROM @T
     45         WHERE  T_code = 'PriceDate'    
     46 
     47         DELETE FROM @T
     48         WHERE T_code LIKE '"_%' ESCAPE '"'
     49               OR T_code = 'rn'
     50               OR T_code = 'PriceDate'
     51         
     52         SELECT T.*,
     53                d.T_value T_date
     54         INTO #ALL
     55         FROM @T AS T
     56         INNER JOIN #Date d ON T.T_id = d.T_id
     57 
     58 --------------------------删除
     59        DELETE iscp 
     60        FROM dbo.T_H_InternalStandardCrudePrice iscp 
     61        INNER JOIN #ALL a ON a.T_date = iscp.PriceDate
     62                             AND a.T_code = iscp.CrudeStandard
     63                             AND a.T_state = 'removed'
     64 
     65 
     66 ---------------------------修改
     67       SELECT iscp.CrudeStandardPriceID,
     68              a.*
     69       INTO #UPDATE
     70       FROM #ALL a
     71       INNER JOIN dbo.T_H_InternalStandardCrudePrice iscp
     72       ON a.T_date = iscp.PriceDate
     73       AND a.T_code = iscp.CrudeStandard
     74 
     75       --SELECT * FROM #UPDATE
     76 
     77       UPDATE T_H_InternalStandardCrudePrice
     78       SET CrudeStandardPrice =  up.T_value 
     79       FROM dbo.T_H_InternalStandardCrudePrice iscp
     80       INNER JOIN #UPDATE up ON iscp.CrudeStandardPriceID =  up.CrudeStandardPriceID
     81 
     82 --------------------------------增加
     83      
     84       INSERT INTO dbo.T_H_InternalStandardCrudePrice
     85               ( CrudeStandard ,
     86                 PriceDate ,
     87                 CrudeStandardPrice 
     88               )
     89        SELECT A.T_code,
     90               CASE WHEN  A.T_date IS NOT NULL
     91                         THEN CAST(A.T_date AS DATETIME)
     92                    ELSE NULL
     93                 END
     94               ,
     95               CASE WHEN A.T_value IS NOT NULL
     96                         THEN CAST(A.T_value AS DECIMAL)
     97                     ELSE NULL
     98               END                  
     99 
    100        FROM (
    101               SELECT a.T_id,
    102                      a.T_code,
    103                      a.T_value,
    104                      a.T_state,
    105                      a.T_date
    106               FROM #ALL a
    107               EXCEPT
    108               SELECT up.T_id,
    109                      up.T_code,
    110                      up.T_value,
    111                      up.T_state,
    112                      up.T_date
    113               FROM #UPDATE up
    114                           
    115             )AS A
    116 
    117     END
  • 相关阅读:
    vue证明题二,让vue跑起来
    vue证明题一,vue全家桶的构成
    Vue证明题
    layDay日期格式不合法报错解决
    【ASP.NET Core】运行原理(3):认证
    【ASP.NET Core】运行原理(2):启动WebHost
    【ASP.NET Core】运行原理(1):创建WebHost
    [Open Source] .NET 基于StackExchange.Redis的扩展
    [高并发]EntityFramework之高性能扩展
    [Tool] Git 使用 与 Git Flow
  • 原文地址:https://www.cnblogs.com/qizhelongdeyang/p/3413252.html
Copyright © 2020-2023  润新知