SQL查询根据列值拆分数据

我有以下数据:

SR_ID OPEN_DATE OPEN_WEEK PRIORITY TTRespond ------- ----------- ----------- ----------- ------------- 24720 01/10/2014 40 P2 - High 3.867066667 24437 11/09/2014 37 P2 - High 418.1992333 24007 04/08/2014 32 P1 - Urgent 12571.28308 24628 25/09/2014 39 P2 - High 3.0407 24446 12/09/2014 37 P2 - High 2694.122933 24420 10/09/2014 37 P3 - Normal 24479 15/09/2014 38 P2 - High 90.56748333 24924 15/10/2014 42 P3 - Normal 26.51546667 24706 01/10/2014 40 P2 - High 

我正在尝试编写一个查询,它将基于OPEN_WEEK和PRIORITY中的值将数据分隔列中的最后一列(TTRespond)返回。

我想返回这样的数据:

 Priority P1 - Urgent P1 - Urgent P1 - Urgent P1 - Urgent P1 - Urgent P1 - Urgent ----------- ----------- ----------- ----------- ----------- ----------- ----------- Week # 31 32 33 34 35 36 

我不想总结数据(即一般数等),我只想返回符合两个条件的所有行。 我在Excel中使用基于数组的公式来实现结果,但速度很慢,无法处理源logging集(只有25,000行)。

任何帮助将不胜感激。

谢谢

目前还不完全清楚你在问什么。 但假设你正在寻找这样的输出,其中优先级/星期数是列,所有可能的匹配值列出行:

 P2 - High, Week 37 | P2 - High, Week 38 | P2 - High, Week 39 | P2 - High, Week 40 --------------------------------------------------------------------------------- 418.1992333 | 90.56748333 | 3.0407 | 3.867066667 2694.122933 | | | 

这种“行/列反转”被称为数据透视表。 简单的数据透视表可以通过以下方式在SQL Server中巧妙地使用group bymax子句来完成:

 ;with T as ( select row_number() over (partition by priority, open_week order by open_date) ix ,T.* from MyTable T where TTrespond is not null ), R as ( select distinct ix from T ) select R.ix ,max(case when [OPEN_WEEK]=37 and T.ix=R.ix and [PRIORITY]='P2 - High' then TTRespond end) as [P2 - High, Week 37] ,max(case when [OPEN_WEEK]=38 and T.ix=R.ix and [PRIORITY]='P2 - High' then TTRespond end) as [P2 - High, Week 38] ,max(case when [OPEN_WEEK]=39 and T.ix=R.ix and [PRIORITY]='P2 - High' then TTRespond end) as [P2 - High, Week 39] ,max(case when [OPEN_WEEK]=40 and T.ix=R.ix and [PRIORITY]='P2 - High' then TTRespond end) as [P2 - High, Week 40] from T, R group by R.ix 

可能的值可以通过在上面的示例之后添加更多的列组合来扩展。