pivot返回的NULL值

时间:2014-08-04 12:47:56

标签: tsql sql-server-2008-r2 pivot

我有一个如下所示的数据集(使用ROW_NUMNBER OVER PARTITION创建的第一列):

RNEEAN  NEEAN    GFCUS  SCSAC
NEAN1   9432806  94328  GE
NEAN2   9432807  94328  GE
NEAN3   94328472 94328  ES
NEAN4   9432848  94328  ES
NEAN5   9432875  94328  HK
NEAN6   9432876  94328  HK
NEAN7   9432877  94328  HK
NEAN8   9432878  94328  HK
NEAN9   9432879  94328  HK

我可以使用以下查询获取此数据集:

select RNEEAN, NEEAN, GFCUS, SCSAC from #tmp where GFCUS=094328 

现在我想通过 RNEEAN 来扩展 NEEAN 列,所以我尝试了以下内容:

SELECT MAX([NEEAN1]) [NEEAN1],MAX([NEEAN2]) [NEEAN2],MAX([NEEAN3]) [NEEAN3],
MAX([NEEAN4]) [NEEAN4], MAX([NEEAN5]) [NEEAN5],MAX([NEEAN6]) [NEEAN6],MAX([NEEAN7]    [NEEAN7], MAX([NEEAN8])  [NEEAN8], MAX([NEEAN9]) [NEEAN9], GFCUS
from #tmp 
PIVOT(
    min(NEEAN) for RNEEAN in ([NEEAN1],[NEEAN2],[NEEAN3],[NEEAN4],[NEEAN5],[NEEAN6],  [NEEAN7],[NEEAN8],[NEEAN9])
) p1
where GFCUS=094328 
GROUP BY GFCUS

但我得到的只有9个NULL列和GFCUS值。

我哪里出错了或遗失了什么?

1 个答案:

答案 0 :(得分:2)

问题在于您的RNEEAN名称,以及您在PIVOT中使用的列名。

RNEEAN列包含以NEAN开头的数据,但您尝试使用名称NEEAN来转移值 - 如果列名称不匹配,则您将返回null

使用上面的数据,你必须使用:

select GFCUS, SCSAC, 
  NEAN1, NEAN2, NEAN3, NEAN4, NEAN5, NEAN6, NEAN7, NEAN8, NEAN9
from
(
  select RNEEAN, NEEAN, GFCUS, SCSAC
  from yourtable
) d
pivot
(
  min(NEEAN)
  for RNEEAN IN (NEAN1, NEAN2, NEAN3, NEAN4, NEAN5, NEAN6, NEAN7, NEAN8, NEAN9)
) piv;

请参阅Demo