我在一个表上写了一个查询,其中包含一个“公司”的“陈述”列表,如此(显然简化):
Statement | Company
---------------------------
ABC | CompA
ABC | CompB
DEF | CompC
查询提供如下信息:
Statement | CompA | CompB | Comp C
--------------------------------------
ABC | X | X |
DEF | | | X
使用这样的代码:
SELECT
[Requirement_Text],
CASE WHEN(SUM(CASE WHEN Company = 'CompA' THEN 1 END)) IS NOT NULL THEN 'X' ELSE ' ' END AS CompA,
CASE WHEN(SUM(CASE WHEN Company = 'CompB' THEN 1 END)) IS NOT NULL THEN 'X' ELSE ' ' END AS CompB,
CASE WHEN(SUM(CASE WHEN Company = 'CompC' THEN 1 END)) IS NOT NULL THEN 'X' ELSE ' ' END AS CompC,
CASE WHEN(SUM(CASE WHEN Company IS NULL THEN 1 END)) IS NOT NULL THEN 'X' ELSE ' ' END AS NILL
FROM [StatementTable]
现在,这很容易,因为我们的公司数量有限,但如果我们说要将其移至部门级别(而非公司),那么我们还会有更多(未知数字 - N)。
所以问题是,如何根据输入表的给定列中的不同值的数量在输出表中创建列?
例如:
Statement | Company | Department
---------------------------------------
ABC | CompA | Dept(1)
DEF | CompA | Dept(2)
DEF | CompA | Dept(3)
GHI | CompA | Dept(3)
ABC | CompB | Dept(N-1)
DEF | CompC | Dept(N)
将成为:
Statement | Dept(1) | Dept(2) | Dept(3) | Dept(N-1) | Dept(N)
---------------------------------------------------------------
ABC | X | | | X |
DEF | | X | X | | X
GHI | | | X | |
注意:在这种情况下,我忽略了公司名称。
提前致谢。