zoukankan      html  css  js  c++  java
  • SQL字符串拼接FOR XML PATH

      在工作中难免会遇到数据库中数据要进行拼接的问题,字符串拼接可以是用SQL的拼接也可以使用C#的拼接,本次说的是使用SQL进行拼接。

      首先插入测试语句:

    --测试语句,准备创建表的语句:如下
    CREATE TABLE dbo.test3
     (
       id       int             IDENTITY(1,1) NOT NULL PRIMARY KEY NONCLUSTERED,
       typeid    nvarchar(50) NULL,
       typeName nvarchar(50) NULL
     );
    CREATE UNIQUE CLUSTERED INDEX idx3_id
    ON dbo.test3(id);
    --插入测试数据
    INSERT INTO dbo.test3(typeid,typeName) VALUES('S1', '一班');
    INSERT INTO dbo.test3(typeid,typeName) VALUES('S1', '二班');
    INSERT INTO dbo.test3(typeid,typeName) VALUES('S1', '三班');
    INSERT INTO dbo.test3(typeid,typeName) VALUES('S2', '一班');
    INSERT INTO dbo.test3(typeid,typeName) VALUES('S2', '二班');
    INSERT INTO dbo.test3(typeid,typeName) VALUES('S3', '三班');
    INSERT INTO dbo.test3(typeid,typeName) VALUES('S3', '四班');
    INSERT INTO dbo.test3(typeid,typeName) VALUES('S3', '五班');
    INSERT INTO dbo.test3(typeid,typeName) VALUES('S3', '六班');
    INSERT INTO dbo.test3(typeid,typeName) VALUES('S4', '一班');
    INSERT INTO dbo.test3(typeid,typeName) VALUES('S4', '二班');

      查询结果如下:

      比如,现在的需求是,我想知道每个阶段(S1为第一阶段)有哪些班级,上图肯定有点乱,如果能每一阶段显示一条数据就好了。

      

    select b.typeid,left(b.list,LEN(b.list)-1) from (select typeid,(select typeName+' ,' from test3
    where a.typeid=typeid--比对条件,如果缺少则每条都相同
    FOR XML PATH('')) as list 
    from test3 a
    group by  typeid
    )b

      执行结果如下:

      至此,就看出,使用sql for xml path很简单就能拼接出想要的结果来,何乐而不为呢。

  • 相关阅读:
    菜鸟学python之程序初体验
    菜鸟学python之大数据的初认识
    js获取本地ip地址和外网IP地址
    Js中foreach()用法及使用的坑
    模拟实现Promise,探究Promise原理
    搞懂JS的事件循环(Event Loop)和宏任务/微任务
    NodeJS 中的 LRU 缓存(CLOCK-2-hand)实现
    设计模式在前端项目中的应用
    JS 中一些高效的魔法运算符
    Js中如何克隆对象?
  • 原文地址:https://www.cnblogs.com/yangleikingly/p/6526082.html
Copyright © 2011-2022 走看看