根据sql中的多位值获取String

时间:2017-01-11 09:31:16

标签: sql sql-server sql-server-2008

我有一张表,其中我有多个位列,如LH1,LH2,LH3,RH1,RH2,RH3。 (这只是示例,在原始数据库中我有20位以上的列.LH表示左手,RH表示右手。同样的方式我有右眼,左眼,右脚,左脚等)

请看下面显示数据,设计和输出内容的图像。

enter image description here

DDL:

CREATE TABLE #LeftRight
(
    LH1 BIT,
    LH2 BIT,
    LH3 BIT,
    RH1 BIT,
    RH2 BIT,
    RH3 BIT
)

INSERT INTO #LeftRight
        ( LH1, LH2, LH3, RH1, RH2, RH3 )
VALUES  ( 1,1,0,1,1,0 ), (0,1,0,0,0,1), (1,0,1,1,0,1)

SELECT * 
FROM #LeftRight

DROP TABLE #LeftRight

现在根据这些比特值,我想得到一个逗号分隔的字符串。

我查看了以下链接,但在我的情况下它没有用

https://dba.stackexchange.com/questions/112408/join-with-comma-separated-values-in-sql-server

2 个答案:

答案 0 :(得分:1)

Select replace('''' + iif([LH1]=1, '1, ','') + iif([LH2]=1, '2, ','') + iif([LH3]=1, '3, ','') + ''' AS LH, ', ', '' AS LH', ' '' AS LH') +
      replace('''' + iif([RH1]=1, '1, ','') + iif([RH2]=1, '2, ','') + iif([RH3]=1, '3, ','') + ''' AS RH, ', ', '' AS RH', ' '' AS RH')
from #LeftRight

答案 1 :(得分:0)

这是一些解决方案:

DECLARE @t TABLE
    (
      id INT ,
      LH1 BIT ,
      LH2 BIT ,
      LH3 BIT ,
      RH1 BIT ,
      RH2 BIT ,
      RH3 BIT
    )

INSERT  INTO @t
VALUES  ( 1, 1, 1, 0, 1, 1, 0 ),
        ( 2, 0, 0, 0, 0, 0, 1 ),
        ( 3, 1, 0, 1, 1, 0, 1 )


SELECT  REPLACE(CONCAT('Row ', 
                       id, 
                       ': - ', 
                       '''', 
                       CASE WHEN LH1 = 1 THEN '1,' END,
                       CASE WHEN LH2 = 1 THEN '2,' END, 
                       CASE WHEN LH3 = 1 THEN '3,' END, 
                       ''' AS Lh, ''',
                       CASE WHEN RH1 = 1 THEN '1,' END,
                       CASE WHEN RH2 = 1 THEN '2,' END, 
                       CASE WHEN RH3 = 1 THEN '3,' END, 
                       ''' AS Rh'           
                       ), ',''' , '''')
FROM    @t t

输出:

Row 1: - '1,2' AS Lh, '1,2' AS Rh
Row 2: - '' AS Lh, '3' AS Rh
Row 3: - '1,3' AS Lh, '1,3' AS Rh

对于旧版本使用:

SELECT  REPLACE('Row ' + 
                CAST(id AS VARCHAR(10)) + 
                ': - ''''' + 
                CASE WHEN LH1 = 1 THEN '1,' ELSE '' END +
                CASE WHEN LH2 = 1 THEN '2,' ELSE '' END + 
                CASE WHEN LH3 = 1 THEN '3,' ELSE '' END +
                ''' AS Lh, ''' +
                CASE WHEN RH1 = 1 THEN '1,' ELSE '' END +
                CASE WHEN RH2 = 1 THEN '2,' ELSE '' END +
                CASE WHEN RH3 = 1 THEN '3,' ELSE '' END +
                ''' AS Rh', 
                ',''' , '''')