2015-10-30 124 views
0

我有(几千一天)填充不同的结果

结果是每份问卷记录包含:70个的东西域(对应于每一个问题)

,我的用户都填写了一份调查问卷我被要求为70个问题中的每一个确定所有的肯定句,并将它们合并成一个字段(对该记录确定的所有问题的总结)。

在其他语言(特别是VBA)中,我将通过初始化一个变量来解决这个问题,循环访问我的记录集并将变量设置为之前的内容+问题的字段名称。我不知道如何在sql中完成此操作。

我试过......

DECLARE @strFYI AS NVARCHAR 
SET @strFYI = '' 

SELECT 
    a.record_num 
    ,CASE 
     WHEN a.Date_Missing = 'Yes' THEN @strFYI = @strFYI + 'Date_Missing, ' 
     WHEN a.Unclear_Images = 'Yes' THEN @strFYI = @strFYI + 'Unclear_Images, ' 
     WHEN a.Damage = 'Yes' THEN @strFYI = @strFYI + 'Damage, ' 
     ELSE @strFYI 
    END AS FYI_Reasons 
FROM 
    questionaretable a 

但显然不起作用。我还需要在列表生成后修改列表中的最后一个逗号和空格,但这不应该成为问题......我只是不确定如何遍历我的记录并在tsql中构建这个并置:)我甚至不确定(因为语法是错误的),如果在评估每个记录之前将变量重置为“'”!

任何人都可以帮助我吗?

+0

[将许多行连接成单个文本字符串?]可能的重复(http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text-string) –

+0

这似乎是连接数据行,而不是数据列:( – JakPackage

+0

是JakPackage,这就是为什么我为你做出不同答案的原因 –

回答

0

这对于70列将会非常难看。

SELECT record_num, LEFT(strFYI, LEN(strFYI) - 2) 
FROM (
    SELECT 
     a.record_num, 
     (CASE WHEN a.Date_Missing = 'Yes' THEN 'Date_Missing, ' ELSE '' END) + 
     (CASE WHEN a.Unclear_Images = 'Yes' THEN 'Unclear_Images, ' ELSE '' END) + 
     (CASE WHEN a.Damage = 'Yes' THEN 'Damage, ' ELSE '' END) as strFYI 
    FROM 
     questionaretable a 
    ) T 

也许是清洁器使用IIF

IIF(逻辑表达式,true_value,false_value)

SELECT record_num, LEFT(strFYI, LEN(strFYI) - 2) 
FROM (
    SELECT 
     a.record_num, 
     IIF(a.Date_Missing = 'Yes', 'Date_Missing, ' , '') + 
     IIF(a.Unclear_Images = 'Yes', 'Unclear_Images, ', '') + 
     IIF(a.Damage = 'Yes', 'Damage, ', '') as strFYI 
    FROM 
     questionaretable a 
    ) T 

作为CElliot提及不是在2008 IIF所以另一种解决办法可以是

isnull((select 'Date_Missing, ' where a.Date_Missing = 'Yes'),'') 
+0

IIF()是随SQL Server 2012一起引入的。此问题标记为SQL Server 2008R2。 – CElliott

+0

@CElliott感谢您的评论,请检查我的更新:) –

+0

这个想法对我有用:)出于某种原因,它只是LEN - 1虽然...它似乎没有存储多余的空格后逗号出于某种原因这只发生在尽头,但空间工作得很好,作为列表项之间的分隔符!) – JakPackage