我需要使用一组列标题来旋转我的表,这些列标题根据输出中的一个字段而变化。
这是目前的样子:
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
我希望它是这样的,您可以看到列根据执行的测试动态变化:
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
最佳答案
要像您正在寻找的那样进行有效的动态列查询,需要恶作剧。我之前采用的方法† 通常是使用一个交叉表/数据透视表查询来捕获列 numbers 之间的映射(其中您有一些合适的最大值 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 | | |
最后,您将第一个映射的 Index
与 Test Name
和 Test Performed
连接起来,以生成交叉表,当您显示结果时,在第二个映射中查找列名称/索引
以返回Test Performed
。
†虽然 不是 在 MySQL 或 C# 中。可转移性很有趣!
我稍后会编辑以添加示例 SQL,一旦我挖掘并正确地抽象它。不过,现在应该可以大致了解一下。
关于c# - 根据字段具有不同列数的交叉表/数据透视表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29360096/