我有一张表,其中我有多个位列,如LH1,LH2,LH3,RH1,RH2,RH3。 (这只是示例,在原始数据库中我有20位以上的列.LH表示左手,RH表示右手。同样的方式我有右眼,左眼,右脚,左脚等)
请看下面显示数据,设计和输出内容的图像。
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
答案 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',
',''' , '''')