合并有数据的列

原创 2005年06月04日 14:40:00

BOM数据排序及分级显示

--示例数据:
CREATE TABLE t1(
    Name varchar(20),
    Col1 varchar(2),
    Col2 varchar(2),
    Col3 varchar(2))
INSERT t1(Name,Col1,Col2,Col3)
SELECT 'A','1','','' UNION ALL
SELECT 'A','2','','' UNION ALL
SELECT 'A','3','','' UNION ALL
SELECT 'A','','4','' UNION ALL
SELECT 'A','','5','' UNION ALL
SELECT 'A','','6','' UNION ALL
SELECT 'A','','7','' UNION ALL
SELECT 'A','','','8' UNION ALL
SELECT 'A','','','9' UNION ALL
SELECT 'A','','','0' UNION ALL
SELECT 'B','11','','' UNION ALL
SELECT 'B','12','','' UNION ALL
SELECT 'B','13','','' UNION ALL
SELECT 'B','14','','' UNION ALL
SELECT 'B','','15','' UNION ALL
SELECT 'B','','16','' UNION ALL
SELECT 'B','','17','' UNION ALL
SELECT 'B','','','18' UNION ALL
SELECT 'B','','','19' UNION ALL
SELECT 'B','','','10' 
GO

问题描述:
    表t1中的列数不定,固定有一个Name列,大于1个的Coln列,列名为Col1~Coln,要求根据Name分组,合并各Coln列中有值的数据。对于示例数据,要求结果如下:

Name    Col1    Col2    Col3 
---------- --------- --------- -------- 
A            1          4           0
A            2          5           8
A            3          6           9
A                        7    
B           11        15        10
B           12        16        18
B           13        17        19
B           14        

(所影响的行数为 8 行)

--处理代码
DECLARE @s varchar(8000),@i int,@fd varchar(8000),@Name varchar(8000)
SELECT @s='',@i=97,@fd='',@name='a.name'
SELECT @i=@i+1,
    @s=@s+' 
        FULL JOIN(
            SELECT Name,'+QUOTENAME(Name)+',
                ID=(SELECT COUNT(*) FROM t1 
                    WHERE Name=a.Name 
                        AND '+QUOTENAME(Name)+'>''''
                        AND '+QUOTENAME(Name)+'<=a.'+QUOTENAME(Name)+')
            FROM t1 a
            WHERE '+QUOTENAME(Name)+'>''''
        )'+CHAR(@i)+' ON a.Name='+CHAR(@i)+'.Name AND a.ID='+CHAR(@i)+'.ID',
    @fd=@fd+',
        '+QUOTENAME(Name)+'=ISNULL('+CHAR(@i)+'.'+QUOTENAME(Name)+','''')',
    @name='ISNULL('+CHAR(@i)+'.Name,'+@name+')'
    FROM syscolumns
    WHERE ID=OBJECT_ID(N't1')
        AND Name<>'Col1'
        AND Name LIKE 'Col%'
EXEC('
    SELECT Name='+@name+',
        Col1=ISNULL(A.Col1,'''')'+@fd+'
    FROM(
        SELECT Name,Col1,
            ID=(SELECT COUNT(*) FROM t1 
                WHERE Name=a.Name
                    AND Col1>''''
                    AND Col1<=a.Col1)
    FROM t1 a
    WHERE Col1>''''
    )a'+@s)
GO

原帖地址

EasyUI指定列-合并相同数据行

  • 2017年08月10日 17:52
  • 14KB
  • 下载

数据库合并列数据

  • 2015年07月29日 16:57
  • 12KB
  • 下载

webapi下使用npoi导出数据到excel,包含自动列宽和自动合并某一列单元格

/// /// 5.2、考场总表导出 /// [Route("ExamRoomExport")] [HttpGet] public FileResult ExamRoomExport(int exam...

sql 多行转多列,多行转一列合并数据,列转行

多行转多列:    要实现该功能pivot行数应该是必不可少吧,下面我就来说说该函数如何使用  局限性:该函数只能针对已知行数要转为几列才能使用,动态行转动态列不支持(个人所知,如可以实现请指教) 用...

合并一个表格多个竖列的td,主要在后台改数据结构

这种形式的。 jsp部分:                                        河道                                         ...

通过集算器将excel数据按列合并

客户数据存在多个excel中,格式如下: 多个excel中前两列相同,第三列后是按照地区存储数据,但是不同的excel中地区可能不能,比如第一个excel中有上海,第二个中没有,现在...
  • rqgxy
  • rqgxy
  • 2017年04月12日 09:28
  • 117

easyui-datagrid合并列 C#使用Dynamic泛型计算合并列数据

easy官方文档,这么写的。。easyui-datagrid的和并列需要如下数据格式数据:偷懒了,直接把官方的搬过来。自己看吧。 Merge some cells to one cell...
  • gzy11
  • gzy11
  • 2016年10月21日 18:37
  • 681

SuperMap Objects .NET 合并同名数据集

  • 2017年12月08日 08:43
  • 10.65MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:合并有数据的列
举报原因:
原因补充:

(最多只允许输入30个字)