首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将列中的like数据合并为一行

将列中的like数据合并为一行
EN

Stack Overflow用户
提问于 2011-03-24 04:24:17
回答 1查看 1.1K关注 0票数 4

我正在尝试合并行的部分内容,这些行是SQL Server2005中读取.CSV的查询的结果集。以下是我拥有的数据的简化版本:

代码语言:javascript
运行
复制
objectID  | value1   | value2
_________________________________
12        | R        | 100
12        | R        | 101
12        | S        | 220
13        | D        | 88
14        | K        | 151
14        | K        | 152

我想要得到的是同一行上每个objectID的值的分组,这样每个objectID只有一行。在图形术语中:

代码语言:javascript
运行
复制
objectID  | value1a  | value2a  | value 1b  | value2b  | value1c  | value2c
______________________________________________________________________________
12        | R        | 100      | R         | 101      | S        | 220
13        | D        | 88       |           |          |          |
14        | K        | 151      | K         | 152      |          |

空白单元格为空。

我一直希望在没有VB的情况下在Excel或Access中做到这一点,但CONCAT和其他类似的函数(以及这里和其他地方提出的类似方法的响应)不起作用,因为每个值都需要留在它自己的单元格中(这些数据最终将与Word表单合并)。如果答案是SQL存储过程或游标,那也没问题,尽管我在编写它们方面还不是很高效。

感谢所有人。

EN

Stack Overflow用户

发布于 2011-03-24 05:10:47

首先将数据导入到临时表中。临时表将以类似以下示例数据的形式结束:

代码语言:javascript
运行
复制
create table #tmp (objectID int, value1 char(1), value2 int)
insert #tmp select
12 ,'R', 100 union all select
12 ,'R', 101 union all select
12 ,'S', 220 union all select
13 ,'D', 88 union all select
14 ,'K', 151 union all select
14 ,'K', 152

然后,您可以使用此SQL批处理-如果需要,可以将其放入存储过程中。

代码语言:javascript
运行
复制
declare @sql nvarchar(max)
select @sql = ISNULL(@sql+',','')
        + 'max(case when rn=' + cast(number as varchar) + ' then value1 end) value' + cast(number as varchar) + 'a,'
        + 'max(case when rn=' + cast(number as varchar) + ' then value2 end) value' + cast(number as varchar) + 'b'
from master..spt_values
where type='P' and number between 1 and (
    select top 1 COUNT(*)
    from #tmp
    group by objectID
    order by 1 desc)

set @sql = '
    select objectID, ' + @sql + '
    from (
        select rn=ROW_NUMBER() over (partition by objectID order by value2), *
        from #tmp) p
    group by ObjectID'

exec (@sql)

输出

代码语言:javascript
运行
复制
objectID    value1a value1b     value2a value2b     value3a value3b
----------- ------- ----------- ------- ----------- ------- -----------
12          R       100         R       101         S       220
13          D       88          NULL    NULL        NULL    NULL
14          K       151         K       152         NULL    NULL
Warning: Null value is eliminated by an aggregate or other SET operation.
票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5411176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档