具有不同列数的交叉表/数据透视查询,具体取决于字段

时间:2015-03-31 03:26:46

标签: c# mysql pivot

我需要使用一组列标题来转动表格,这些列标题会根据输出中的某个字段而变化。

目前的情况如下:

id | Name | Test Name | Test Performed | Test Value
1    John     HIV         EIA            Reactive
1    John     HIV         EIA2           Reactive
1    John     HIV         WB             Positive
1    John     HIV         Final Kit      Positive
2    Mark     HIV         Rapid          Reactive
2    Mark     HIV         EIA            Reactive
2    Mark     HIV         EIA2           Reactive
2    Mark     HIV         Final Result   Positive
2    Mark     Immuno      CD4%           12.0%
2    Mark     Immuno      CD4 Lympo      1299
2    Mark     Immuni      CD4 Absolute   838
3    Carl     SY          RPR            Reactive
3.   Carl     SY          TPHA           Reactive

我希望它是这样的,你可以看到列根据Test Performed动态变化:

id | Name | Test Name | EIA      | EIA2   | Rapid |  WB         |Final Kit 
1    John    HIV        Reactive  Reactive           Positive
2    Mark    HIV        Reactive  Reactive           Reactive    Reactive

id | Name | Test Name | CD4% | CD4 Lympo | CD4 Absolute
1    Mark   Immuno      12.0%  1299         838 


id | Name | Test Name | RPR    | TPHA
3    Carl    SY         Reactive  Reactive

1 个答案:

答案 0 :(得分:0)

要像您一样寻找有效的动态列查询,需要恶作剧。我在†之前完成它的方式通常是使用一个交叉表/数据透视查询来捕获列数字之间的映射(其中你有一些合适的最大值N)每个条目的最后一列标签。输出结果如下:

Test Name   |Test Performed |Index
HIV         |EIA            |1
HIV         |EIA2           |2
[…]

然后你有另一个查询来映射另一种方式,如下所示:

Test Name   |1      |2          |3              |4      |5
HIV         |EIA    |EIA2       |Rapid          |WB     |Final Kit
Immuno      |CD4%   |CD4 Lympo  |CD4 Absolute   |       |
SY          |RPR    |TPHA       |               |       |

最后,您从初始表格中IndexTest Name上加入的第一张地图Test Performed转移以生成交叉表,当您显示结果时,请查看列在第二张地图中输入名称/ Index以获取Test Performed

†​​虽然在MySQL或C#中。传递性很有趣!

我将稍后编辑以添加示例SQL,一旦我将其挖掘并正确抽象。不过,这应该是现在的总体思路。