zoukankan      html  css  js  c++  java
  • SQL For Xml

    最近遇到点棘手的问题,大致如下:

      1、数据局格式:

    企业名称 排口名称 监测时间  监测因子 

     a     b     c     pH值 

     a     b     c     氨氮 

     a     b     c     化学需氧量(COD)

    企业名称、排口名称数据都一样,需求是把企业名称列相同的数据显示一行,开始觉得很简单,做着做着觉得拼接数据太烦,然后就想能不能用sql操作。

    纠结了小半天没有写出一个适合的sql,然后去百度了(谷歌最近大姨妈了,上不去,也没研究咋回事),然后找到了N多种方案,最后找到一个方案。写sql函数,

    sql函数的语法 大致 这样(有问题的话,麻烦指出来,好改正......)

    if exists (select * from dbo.sysobjects where id = object_id(N'dbo.函数名称') and xtype in (N'FN', N'IF', N'TF'))--判断该函数是否存在
    drop function [dbo].函数名称
    GO
    create FUNCTION dbo.函数名称()
    RETURNS VARCHAR(500) --必须,类型可以集资定
    AS 
    BEGIN
      DECLARE @SQL NVARCHAR(500)
       SELECT @SQL = (ISNULL(@SQL+',','') + 需要合并的列名) FROM 表名  --ISNULL 必须包含两个参数
       group by 分组的列名  --可选
    RETURN @SQL  --最后一条必须是返回语句
    END
    go
    select distinct dbo.函数名称(),列名 from 表名

    然后顺利解决。

    之前用上面的方法,发现有点不够简洁,根据博友的提示,又重新整合了一个。

    SELECT B.StuName ,LEFT(StuList,LEN(StuList)-1) as hobby FROM (
    SELECT StuName,
    (SELECT habbyName+',' FROM Habby 
      WHERE A.habbyId like'%'+cast(Id as nvarchar(5))+'%'
      FOR XML PATH('')) AS StuList
    FROM Students A 
    GROUP BY StuName,A.habbyId
    ) B 

    这个做法不错。

  • 相关阅读:
    数据库系列之查询(4)
    数据库系列之查询(3)
    数据库系列之查询(2)
    数据库系列之查询(1)
    数据库系列之视图
    数据库系列之数据管理(删除数据)
    数据库系列之数据管理(更新数据)
    数据库系列之数据管理(插入数据)
    数据库管理之数据表管理(2)
    数据库管理之数据表管理(1)
  • 原文地址:https://www.cnblogs.com/bobo-pcb/p/3781968.html
Copyright © 2011-2022 走看看