Sql server SQL Pivot仅选择行

Sql server SQL Pivot仅选择行,sql-server,sql-server-2012,pivot,Sql Server,Sql Server 2012,Pivot,我正在尝试透视数据库,以便只有某些行成为列。下面是我的桌子的样子: ID QType CharV NumV 1 AccNum 10 1 EmpNam John Inc 0 1 UW Josh 0 2 AccNum 11 2 EmpNam CBS 0 2 UW Dan 0

我正在尝试透视数据库,以便只有某些行成为列。下面是我的桌子的样子:

ID  QType       CharV       NumV
1   AccNum                  10
1   EmpNam      John Inc    0
1   UW          Josh        0
2   AccNum                  11
2   EmpNam      CBS         0
2   UW          Dan         0
我希望桌子看起来像这样:

ID  AccNum      EmpNam
1   10          John Inc
2   11          CBS 
我有两个主要的问题要解释

第一:我试图获取的值并不总是在同一列中。因此,虽然AccNum始终位于NumV列中,但EmpName始终位于CharV列中

第二:我需要找到一种方法来忽略我不想要的数据。在本例中,它将是QType列中带有UW的行

以下是我的代码:

SELECT *
  FROM testTable
    Pivot(
    MAX(NumV)
    FOR[QType]
    In ([AccNum],[TheValue])
    )p
但它给了我以下的结果:

ID  CharV   AccNum  TheValue
1           10      NULL
2           11      NULL
2   CBS     NULL    NULL
2   Dan     NULL    NULL
1   John IncNULL    NULL
1   Josh    NULL    NULL

在这种情况下,应使用条件聚合进行分组。尝试以下方法:

SELECT ID
, MAX(CASE WHEN QType = 'AccNum' THEN NumV END) AS AccNum
, MAX(CASE WHEN QType = 'EmpNam' THEN CharV END) AS EmpNam
FROM testTable
GROUP BY ID
由于内部CASE仅在满足when条件时获取值,因此MAX函数将为您提供所需的值。当然,这只适用于每个ID只有唯一的QType的情况


通常,当您的条件复杂时,在Sql Server中使用PIVOT并不能一步到位,特别是当您需要来自不同列的值时。您可以在两个查询中旋转表并将它们连接起来,但它的性能会很差,并且不如我的建议可读。

谢谢您,这非常有效!我感谢你给了我最简单最简单的答案,而不是我认为我想要的。