Сводная таблица в пределах sql - PullRequest
1 голос
/ 03 мая 2019

У меня есть две таблицы

[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 голосов
/ 03 мая 2019

Попробуйте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...