SQL中的数据透视表

时间:2019-05-03 14:02:46

标签: sql sql-server tsql

我有两个桌子

[stg]。[VBAP]

SELECT distinct [VBELN]
      ,[POSNR]
FROM [stg].[VBAP]

VBELN   POSNR
0180011720  000010

我还有第二张表VBPA

SELECT [VBELN]
      ,[POSNR]
      ,[PARVW]
      ,[KUNNR]
  FROM [stg].[VBPA]


VBELN   POSNR   PARVW   KUNNR
0180011720  000000  AG  0000506980
0180011720  000000  RE  0000506980
0180011720  000000  RG  0000506980
0180011720  000000  WE  0000506980
0180011720  000000  ZF  0000106790
0180011720  000000  ZU  0000505497
0180011720  000010  ZF  0000108579
0180011720  000010  ZU  0000506980

我需要在两个表之间创建一个数据透视表,以得到例如结果 例如,对于PARVW ='ZU',我有两个[KUNNR]值,当Posn <> 0

时,我必须使用该值

enter image description here

我尝试

with VBPA_CTE  ([VBELN],KUNNR,POSNR,PARVW,id)
as(
Select T3.[VBELN],T3.KUNNR ,T3.POSNR ,T3.PARVW

,row_number() over (partition by [PARVW] order by [POSNR] desc )as id
from (
SELECT distinct T1.[VBELN]
      ,T1.[POSNR]
      ,T2.[PARVW]
      ,T2.[KUNNR]
FROM [stg].[VBAP] T1
LEFT JOIN (  select [VBELN]
      ,[POSNR]
      ,[PARVW]
      ,[KUNNR]
      FROM [stg].[VBPA]) T2
      ON T1.[VBELN]=T2.[VBELN]) T3

  where T3.[VBELN] = '0180011720 '
  )
SELECT [VBELN]
  ,[POSNR]
  ,[AG]
  ,[RE]
  ,[RG]
  ,[WE]
  ,[ZU]
 FROM VBPA_CTE

PIVOT (
max(VBPA_CTE.[KUNNR]) 
FOR VBPA_CTE.[PARVW] IN ([AG],[RE],[RG],[WE],[ZU])
) p

  where id=1

当[POSNR] <> 0时,我不知道如何链接两个表以及如何使用该条件?

1 个答案:

答案 0 :(得分:0)

尝试一下:

WITH VBPA_CTE AS 
(
SELECT [VBELN]
  ,[POSNR]
  ,[PARVW]
  ,[KUNNR]
FROM [stg].[VBPA]
WHERE [POSNR] <> '000000'
)

SELECT [VBELN]
  ,[POSNR]
  ,[AG]
  ,[BP]
  ,[PY]
  ,[SH]
  ,[ZU]
 FROM VBPA_CTE

PIVOT (
max(VBPA_CTE.[KUNNR]) 
FOR VBPA_CTE.[PARVW] IN ([AG],[BP],[PY],[SH],[ZU])
) p