具有未知列数的SQL查询

时间:2014-01-07 06:17:15

标签: mysql sql sql-server

我在一个表上写了一个查询,其中包含一个“公司”的“陈述”列表,如此(显然简化):

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    |           |             

注意:在这种情况下,我忽略了公司名称。

提前致谢。

1 个答案:

答案 0 :(得分:0)

你应该使用动态查询和Pivote:

Check This out

你可以在这里看到文件: Check this