虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > MsSql数据库 > SQL2008根据条件拆分列

SQL2008根据条件拆分列
类别:MsSql数据库   作者:码皇   来源:屈文哲 廊坊师范学院信息技术提高班 第十期     点击:

在为人事局做报表过程中,遇到一个棘手的问题,客户要求把数据库中的一列数据根据条件分成多列。 比如:数据库中有省份这么一列数据 客户要求根据省份分类,河北省一列、北

在为人事局做报表过程中,遇到一个棘手的问题,客户要求把数据库中的一列数据根据条件分成多列。

比如:数据库中有省份这么一列数据

客户要求根据省份分类,河北省一列、北京市一列、天津市一列,剩下的为其他,目标效果如下:

手工编写的SQL语句Version1.0版:

    select 河北 = PARSENAME(provice,(charindex('
    河北'
    ,provice))) , 北京 = PARSENAME(provice,(charindex('
    北京'
    ,provice))) , 天津 = PARSENAME(provice,(charindex('
    天津'
    ,provice))) , 其他 =(select provice where charindex('
    河北'
    ,provice) = 0 and charindex('
    北京'
    ,provice) = 0 and charindex('
    天津'
    ,provice) = 0)from a
执行效果如下:


可用户的需要只是想查询这个人是否在这个省份内,并不想知道具体是这个省的哪个城市,所以用replace函数对SQL语句进行了升级,SQL语句Version2.0版:

    select 河北 =REPLACE(PARSENAME(provice,(charindex('
    河北'
    ,provice))),PARSENAME(provice,(charindex('
    河北'
    ,provice))),'

    '
    ), 北京 =REPLACE(PARSENAME(provice,(charindex('
    北京'
    ,provice))),PARSENAME(provice,(charindex('
    北京'
    ,provice))),'

    '
    ), 天津 =REPLACE(PARSENAME(provice,(charindex('
    天津'
    ,provice))),PARSENAME(provice,(charindex('
    天津'
    ,provice))),'

    '
    ), 其他 =REPLACE((select provice where charindex('
    河北'
    ,provice) = 0 and charindex('
    北京'
    ,provice) = 0 and charindex('
    天津'
    ,provice) = 0), (select provice where charindex('
    河北'
    ,provice)= 0 and charindex('
    北京'
    ,provice) = 0 and charindex('
    天津'
    ,provice) = 0), '

    '
    )from a
执行效果如下:


在解决问题过程中,发现网上对此类问题并没有很好的解决方案,所以在此把自己研究成果拿出来和大家分享下,希望能帮助大家解决开发过程中遇到的问题。

相关热词搜索: 条件