0

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

Question Category | Question Number | Respondent ID | Answer

这似乎是数据最合乎逻辑的存储方式。Question CategoryQuestion Number和的组合Respondent ID是唯一的。

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

这可能吗?我猜测将需要一定数量的动态 SQL,尤其是要显示预期的 50 多个调查。

4

3 回答 3

0

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

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

然后,您应该根据您的标准、非转置 SQL 的结果动态构建您的报告(可能是 HTML 或其他内容)。

例如,在 HTML 中,您可以<th>column</th>为表格标题和<td>value</td>数据单元格创建任意数量的列 - 只要您已经知道输出结果中将包含多少列。

于 2013-01-15T01:17:38.277 回答
0

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

于 2013-01-15T02:42:00.730 回答
0

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

一种想法是连接受访者 ID。您可以在 SQL Server 中这样做:

select distinct Answer,
       (select cast(RespondentId as varchar(255))+'; '
        from Responses r2
        where r2.Answer = r.Answer
        for xml path ('')
       ) AllResponders
from Responses r

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

于 2013-01-15T02:19:07.767 回答