我有一个包含一系列调查回复的表格,结构如下:
Question Category | Question Number | Respondent ID | Answer
这似乎是数据最合理的存储空间。 Question Category
,Question Number
和Respondent ID
的组合是唯一的。
问题是,我被要求提供一个以Respondent ID
为列的报告,其中Answer
为行。由于Answer
是自由文本,因此数字期望PIVOT
命令无效。如果每一行都是特定的Question Category
/ Question Number
配对,那么所有信息都会显示在一个表格中。
这可能吗?我猜测需要一定数量的动态SQL,特别是预计要显示的50多个调查。
答案 0 :(得分:0)
我认为这个任务应该由您的客户端代码完成 - 尝试在SQL端进行这种转置并不是一个好主意。这样的SQL(即使它可以被构造)可能会非常复杂和脆弱。
首先,您应该计算出有多少不同的答案 - 如果所有答案都不同,您可能不想创建1000列的报告。另外,你可能想确保答案很窄 - 如果有人给出了非常糟糕的1KB答案呢?
然后,您应该根据标准的非转置SQL的结果动态构建报表(将是HTML或其他内容)。
例如,在HTML中,您可以根据需要使用<th>column</th>
创建表头,为数据单元创建<td>value</td>
- 只要您知道将有多少列你的输出结果。
答案 1 :(得分: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
(这是未经测试的,因此可能存在语法错误。)
答案 2 :(得分:0)
如果报告服务或excel power pivot是报告的可能性,那么它们可能比直接的SQL查询更容易完成您想要的任务。在RS中,您可以使用Tablix,并在电源中旋转数据透视表。两者都避免必须在sql pivot语句中定义透视列,并且两者都可以从表格结果集中动态确定列名。