Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 显示一个字段';s值,如果为null,则移动到下一个_Sql_Sql Server - Fatal编程技术网

Sql 显示一个字段';s值,如果为null,则移动到下一个

Sql 显示一个字段';s值,如果为null,则移动到下一个,sql,sql-server,Sql,Sql Server,我希望有人能帮我解决这个问题!我正在使用返回的数据填写表格。表格上有一个问题可以有多个答案,Q8ReasonA-Q8ReasonH。我的目标是按顺序显示每个答案,它们之间没有空格 例如,如果某人通过选择B、F和H回答问题8,我希望它显示: 问题八? 回答:B,F,H 现在它显示的是隔开的(例如,在答案所在的位置留下空白)。以下是我的部分代码: SELECT DISTINCT SFA.DOB, SFA.Name, SFA.SupvsrName, SFA.Question8,MFA.Q8Rea

我希望有人能帮我解决这个问题!我正在使用返回的数据填写表格。表格上有一个问题可以有多个答案,Q8ReasonA-Q8ReasonH。我的目标是按顺序显示每个答案,它们之间没有空格

例如,如果某人通过选择B、F和H回答问题8,我希望它显示:

  • 问题八? 回答:B,F,H
  • 现在它显示的是隔开的(例如,在答案所在的位置留下空白)。以下是我的部分代码:

    SELECT DISTINCT SFA.DOB, SFA.Name, SFA.SupvsrName,
       SFA.Question8,MFA.Q8ReasonA, MFA.Q8ReasonB, MFA.Q8ReasonC,
       MFA.Q8ReasonD, MFA.Q8ReasonE, MFA.Q8ReasonF, MFA.Q8ReasonG, MFA.Q8ReasonH
    FROM SingleFileAnswer SFA
    JOIN MultipleFileAnswer MFA on SFA.SupvsrID=MFA.SupvsrID
    WHERE SFA.SupvsrID=1234
    

    您可以将
    CASE
    STUFF
    一起使用,以仅生成非空答案的逗号分隔值:

    select distinct SFA.DOB,
        SFA.name,
        SFA.SupvsrName,
        SFA.Question8,
        STUFF(
            case when MFA.Q8ReasonA is not null then ', A' else '' END +
            case when MFA.Q8ReasonB is not null then ', B' else '' END +
            case when MFA.Q8ReasonC is not null then ', C' else '' END +
            case when MFA.Q8ReasonD is not null then ', D' else '' END +
            case when MFA.Q8ReasonE is not null then ', E' else '' END +
            case when MFA.Q8ReasonF is not null then ', F' else '' END +
            case when MFA.Q8ReasonG is not null then ', G' else '' END +
            case when MFA.Q8ReasonH is not null then ', F' else '' END
        , 1, 2, '') answers 
    from SingleFileAnswer SFA
    join MultipleFileAnswer MFA on SFA.SupvsrID = MFA.SupvsrID
    where SFA.SupvsrID = 1234
    
    如果要显示实际答案,请执行以下操作:

    select distinct SFA.DOB,
        SFA.name,
        SFA.SupvsrName,
        SFA.Question8,
        STUFF(
            coalesce(', ' + MFA.Q8ReasonA, '') +
            coalesce(', ' + MFA.Q8ReasonB, '') +
            coalesce(', ' + MFA.Q8ReasonC, '') +
            coalesce(', ' + MFA.Q8ReasonD, '') +
            coalesce(', ' + MFA.Q8ReasonE, '') +
            coalesce(', ' + MFA.Q8ReasonF, '') +
            coalesce(', ' + MFA.Q8ReasonG, '') +
            coalesce(', ' + MFA.Q8ReasonH, '') 
        , 1, 2, '') answers 
    from SingleFileAnswer SFA
    join MultipleFileAnswer MFA on SFA.SupvsrID = MFA.SupvsrID
    where SFA.SupvsrID = 1234
    

    您可以将字符串与
    concat
    函数连接在一起,并使用
    isnull
    函数检查
    null
    值。使用
    stuff
    删除初始逗号和空格(从字符
    1
    开始,并将
    2
    字符替换为空字符串
    '
    ):


    您在哪里以及如何将不同的答案连接在一起?您当前的脚本正在返回几个单独的字符串值。这简直是一个可怕的设计。你在这里违反了1NF,这会给你带来痛苦。你的答案应该是行而不是列。想想如果你想增加一个新的理由,这将是多么痛苦。您必须更改每个查询。如果你修改了设计,查询会很简单;这些只是从另一个查询返回的一些值,我在该查询中将特定的答案行转换为它们自己的列。该查询是动态的,将根据需要进行调整。这些答案是用户选择的结构化列表项。查询正在向表单提供要填写的数据。由于有多个用户,每个用户只能返回一行-因此将所有用户答案移动到一行/多列,而不是几列/多行。如果各个
    Reason
    列的值与
    A-H
    列的值不同,则会出现这种情况,这也适用。有没有办法用CR代替逗号?这样它就可以将每个答案显示在新的一行而不是列表中。我认为这种处理方式在应用程序中处理得更好。您可以使用char(),但我不太喜欢这种方法,也不建议使用。谢谢!这很有效。有没有办法用CR代替逗号?因此,它将在新行而不是列表中显示每个答案?@Bester Per中的详细信息您应该使用
    char(10)
    char(10)+char(13)
    ,具体取决于您显示数据的位置。为了其他有相同问题的人的利益,如果这是你想要的答案,请将此标记为答案。我已经看过该问答,并尝试在上面的框架内使用char(),但它没有返回。这就是我在这里问的原因。@Bester你在哪里检查是否包括马车返回?SSMS中的输出窗口忽略换行符和回车符,我知道这是可行的,因为我已成功地将数据以这种方式输出到SSRS和excel,其中确实包含了换行符。以查询输入的形式。如上所述,它在我的表单中显示为:“原因A的文本,原因B的文本,,,,原因F的文本。”当我添加CHAR()时,它以相同的方式显示。
    select distinct
           SFA.DOB
          ,SFA.Name
          ,SFA.SupvsrName
          ,SFA.Question8
          ,MFA.Q8ReasonA
          ,MFA.Q8ReasonB
          ,MFA.Q8ReasonC
          ,MFA.Q8ReasonD
          ,MFA.Q8ReasonE
          ,MFA.Q8ReasonF
          ,MFA.Q8ReasonG
          ,MFA.Q8ReasonH
          ,stuff(concat(isnull(', ' + MFA.Q8ReasonA,'')
                        ,isnull(', ' + MFA.Q8ReasonB,'')
                        ,isnull(', ' + MFA.Q8ReasonC,'')
                        ,isnull(', ' + MFA.Q8ReasonD,'')
                        ,isnull(', ' + MFA.Q8ReasonE,'')
                        ,isnull(', ' + MFA.Q8ReasonF,'')
                        ,isnull(', ' + MFA.Q8ReasonG,'')
                        ,isnull(', ' + MFA.Q8ReasonH,'')
                        )
                ,1,2,'') as Concatenated
    from SingleFileAnswer as SFA
        join MultipleFileAnswer as MFA
            on SFA.SupvsrID = MFA.SupvsrID
    where SFA.SupvsrID = 1234;