T1
编号 第一列 第二列 第三列 第四列
 1  是   否   是   否
 2  否   否   是   否
 3  是   是   是   否
 4  否   否   是   是
结果
编号  结果一  结果二
 1  13   1010
 2  3    0010
 3  123   1110
 4  34   0011
结果一的意思是如果哪列上有值,就记录哪列,举例编号一,第一列和第三列结果是“是”,所以在结果一中显示“13”。
结果二的意思是,综合指定列,做个合集,0代表否,1代表是

解决方案 »

  1.   

    USE test
    GOif object_id('T1') is not null 
    drop table T1
    Go
    Create table T1([编号] smallint,[第一列] nvarchar(1),[第二列] nvarchar(1),[第三列] nvarchar(1),[第四列] nvarchar(1))
    Insert into T1
    Select 1,N'是',N'否',N'是',N'否'
    Union all Select 2,N'否',N'否',N'是',N'否'
    Union all Select 3,N'是',N'是',N'是',N'否'
    Union all Select 4,N'否',N'否',N'是',N'是'
    SELECT
    编号
    ,CASE WHEN [第一列]=N'是' THEN '1' ELSE '' END
    +CASE WHEN [第二列]=N'是' THEN '2' ELSE '' END
    +CASE WHEN [第三列]=N'是' THEN '3' ELSE '' END
    +CASE WHEN [第四列]=N'是' THEN '4' ELSE '' END AS [结果一]
    ,CASE WHEN [第一列]=N'是' THEN '1' ELSE '0' END
    +CASE WHEN [第二列]=N'是' THEN '1' ELSE '0' END
    +CASE WHEN [第三列]=N'是' THEN '1' ELSE '0' END
    +CASE WHEN [第四列]=N'是' THEN '1' ELSE '0' END AS [结果二]
    FROM T1

    /*
    编号     结果一  结果二
    ------ ---- ----
    1      13   1010
    2      3    0010
    3      123  1110
    4      34   0011
    */