首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当值为文本时转置SQL表

当值为文本时转置SQL表
EN

Stack Overflow用户
提问于 2013-01-15 09:02:16
回答 3查看 411关注 0票数 0

我有一个包含一系列调查回复的表格,结构如下:

代码语言:javascript
复制
Question Category | Question Number | Respondent ID | Answer

这似乎是最符合逻辑的数据存储。Question NumberRespondent ID的组合是独一无二的。

问题是,有人要求我提供一份以Respondent ID为列、以Answer为行的报告。由于Answer是自由文本的,因此期望数字的PIVOT命令没有帮助。如果每一行都是一个特定的Question Category / Question Number配对,这样所有信息都显示在一个表中,那就更好了。

这个是可能的吗?我猜将需要一定数量的动态SQL,特别是在预期要显示的50多个调查的情况下。

EN

回答 3

Stack Overflow用户

发布于 2013-01-15 09:17:38

我认为这个任务应该由你的客户端代码来完成-尝试在SQL端进行这种转置并不是一个很好的主意。这样的SQL (即使可以构造)可能会非常复杂和脆弱。

首先,你应该计算有多少不同的答案-如果所有的答案都不同,你可能不想创建1000列宽的报告。此外,你可能想要确保答案是狭窄的-如果有人给出了非常糟糕的1KB宽的答案怎么办?

然后,您应该根据标准的非转置SQL的结果动态地构造您的报告(是HTML还是其他什么)。

例如,在超文本标记语言中,您可以使用表头的<th>column</th>和数据单元格的<td>value</td>创建任意数量的列-前提是您已经知道输出结果中将有多少列。

票数 0
EN

Stack Overflow用户

发布于 2013-01-15 10:19:08

在我看来,问题似乎在于列数。你不知道有多少受访者。

一种想法是连接应答者ids。您可以在SQL Server中执行以下操作:

代码语言:javascript
复制
select distinct Answer,
       (select cast(RespondentId as varchar(255))+'; '
        from Responses r2
        where r2.Answer = r.Answer
        for xml path ('')
       ) AllResponders
from Responses r

(这是未经测试的,因此可能存在语法错误。)

票数 0
EN

Stack Overflow用户

发布于 2013-01-15 10:42:01

如果报表可以使用报告服务或excel power pivot,那么它们都可能比直接的sql查询更容易实现您想要的功能。在RS中,你可以使用tablix,在power中,你可以使用数据透视表。它们都避免了在sql pivot语句中定义透视表列,并且都可以从表格结果集中动态确定列名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14329559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档