行转列之后的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

时间: 2024-07-31 20:49:24

行转列之后的datagrid的保存的相关文章

Easyui Datagrid 修改显示行号列宽度

EasyUI中Datagrid的第一列显示行号,可是如果数据量大的的时候,显示行号的那一列数据会显示不完全的. 可以通过修改Datagrid的样式来解决这个问题,在样式中加入下面这个样式,就可以自己修改显示行号列的宽度了 .datagrid-header-rownumber,.datagrid-cell-rownumber{ width:40px; }

oracle行转列与列转行

一.行转列 在有些应用场景中,如学生成绩.学生所有科目的成绩都保存到一张表里面,当我们需要以列表的形式显示出学生所对应的每一科目的成绩的时候,需要使用到行转列. 示例 1 -- 学生成绩表 2 create table grade ( 3 id varchar2(64) not null, 4 name varchar2(20) not null, 5 course varchar2(100) not null, 6 score number(3) not null, 7 primary key

delphi CXGRID用法 (取行、列值;定位选中某行等等)

CXGRID用法 (取行.列值:定位选中某行等等) Delphi Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值 cxGrid1DBTableView1.Controller.FocusedRowIndex 当前行号 cxGrid1DBTableView1.Controller.FocusedRow 当前行 cxGrid1DBTableView1.Controller.FocusedColumn 当前列 cxGrid1DBTableView1.Controller.Focused

PIVOT就是行转列,UNPIVOT就是列传行

PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合.UNPIVOT与PIVOT执行相反的操作,将表值表达式的列转换为列值. 通俗简单的说:PIVOT就是行转列,UNPIVOT就是列传行 一.PIVOT实例 1. 建表 建立一个销售情况表,其中,year字段表示年份,quarter字段表示季度,amount字段表示销售额.quarter字段分别用Q1, Q2, Q3, Q4表示一.二.三.四季度. SQL 代码   复制 C

MATLAB基本操作(十):关于OpenCV坐标系与MATLAB中矩阵行与列的对应

OpenCV坐标点与MATLAB中矩阵行与列的对应 Last Edit 2014/5/4 转载请注明出处:http://blog.csdn.net/jxlijunhao 之所以会写这个东西,因为要把OpenCV中得到的角点坐标,保存在txt文件中,然后投影到matlab中. 首先,OpenCV中的坐标系如下图: 所以,OpenCV中以(0,0)为原点,假定一个点(10,2),表示y=10,x=2 在matlab中以  (1,1)为原点,所以上面的点在matlab中应为(11,3) 验证代码: 在

Java 插入、隐藏/显示、删除Excel行或列

概述操作Excel工作表时,对表格中的行或列数据可执行,包括插入.隐藏.显示.删除等在内的多种操作需求,本文将通过Java代码示例演示每种操作的具体实现方法.文中方法使用了Java Excel类库(Free Spire.XLS for Java 免费版),可通过官网下载包,解压,并将lib文件中的jar文件导入Java程序:或者通过maven仓库导入.导入效果如下: Java代码示例1. 插入行或列 import com.spire.xls.*; public class InsertRowAn

MySQL,排序,统计行转列

表 -- ------------------------------ Table structure for a-- ---------------------------- DROP TABLE IF EXISTS `a`; CREATE TABLE `a` ( `type` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `val` varchar(255) DEFAULT NULL ) ENGINE=InnoDB

GreenPlum之数组合并取交集及行变列、列变行函数

--1.利用INTERSECT关键字数组之间交集函数 CREATE OR REPLACE FUNCTION array_intersect(anyarray, anyarray) RETURNS anyarray AS $$ SELECT ARRAY( SELECT UNNEST($1) INTERSECT SELECT UNNEST($2)); $$ LANGUAGE SQL; select array_intersect(array[1,2,3],array[2,3,4]); --2.行变列

行转列、列转行

一:行转列 模式:N行转一列  本实验N取31.建表SQL> create table grade(id int,name varchar2(10),subject varchar2(10),grade number(3));2.插入实验数据insert into grade values(1,'Andy','Yuwen',11);insert into grade values(2,'Andy','Math',22);insert into grade values(3,'Andy','Eng