Поворот таблицы с несколькими значениями - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь повернуть таблицу доступа с несколькими значениями результата, как первая таблица на рисунке ниже.Кто-нибудь имеет представление о том, как получить результат, как во второй таблице?

Pivot table sample

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Поскольку вы не можете использовать сводные запросы в качестве подзапросов в запросе в Microsoft Access, вам придется сохранить два сводных запроса для разделения объектов запросов Microsoft Access:

Pivot_Price

TRANSFORM Sum([Price]) AS SumPrice
SELECT [month], item, store, manager
FROM Table1
GROUP BY [month], item, store, manager
PIVOT [type];

Pivot_Weight

TRANSFORM Sum([Weight]) AS SumWeight
SELECT [month], item, store, manager
FROM Table1
GROUP BY [month], item, store, manager
PIVOT [type];

И затем присоедините их к третьему запросу:

SELECT
  PP.Month,
  PP.item,
  PP.store,
  PP.manager,
  PP.TY AS [TY-Price],
  PP.LY AS [LY-Price],
  PP.PY AS [PY-Price],
  PW.TY AS [TY-Weight],
  PW.LY AS [LY-Weight],
  PW.PY AS [PY-Weight]
FROM
  Pivot_Price AS PP INNER JOIN Pivot_Weight AS PW
ON
  PP.month = PW.month AND
  PP.item = PW.item AND
  PP.store = PW.store AND
  PP.manager = PW.manager
0 голосов
/ 07 декабря 2018

Вы не можете использовать несколько агрегаций с сводной таблицей, но есть простое решение для вашей проблемы

Создав две сводные таблицы и объединив обе таблицы, разделенные по цене и весу, возможно.

/*PRICE*/

SELECT  MONTH
       ,ITEM
       ,STORE
       ,MANAGER
       ,[TY] AS TY_PRICE
       ,[LY] AS LY_PRICE
       ,[PY] AS PY_PRICE
INTO ##TMP_PRICE
FROM(
      select MONTH
            ,ITEM
            ,STORE
            ,MANAGER
            ,TYPE
            ,SUM(PRICE) AS PRICE
      FROM TABLE_X
      GROUP BY MONTH
            ,ITEM
            ,STORE
            ,MANAGER
            ,TYPE) AS TMP
PIVOT(
MAX(PRICE)
FOR TYPE IN([TY],[LY],[PY])
) AS PVT

/*WEIGHT*/

SELECT  MONTH
       ,ITEM
       ,STORE
       ,MANAGER
       ,[TY] AS TY_WEIGHT
       ,[LY] AS LY_WEIGHT
       ,[PY] AS PY_WEIGHT
INTO ##TMP_WEIGHT
FROM(
      select MONTH
            ,ITEM
            ,STORE
            ,MANAGER
            ,TYPE
            ,SUM(WEIGHT) AS WEIGHT
      FROM TABLE_X
      GROUP BY MONTH
            ,ITEM
            ,STORE
            ,MANAGER
            ,TYPE) AS TMP
PIVOT(
MAX(WEIGHT)
FOR TYPE IN([TY],[LY],[PY])
) AS PVT

После создания обеих таблиц объедините их

SELECT ISNULL(TP.month,TW.month)  as MONTH
      ,ISNULL(TP.ITEM,TW.ITEM) AS ITEM
      ,ISNULL(TP.STORE,TW.STORE) AS STORE
      ,ISNULL(TP.MANAGER,TW.MANAGER) AS MANAGER
      ,TY_WEIGHT
      ,LY_WEIGHT
      ,PY_WEIGHT
      ,TY_PRICE
      ,LY_PRICE
      ,PY_PRICE
FROM ##TMP_PRICE TP
FULL JOIN ##TMP_WEIGHT TW ON (TP.MONTH = TW.MONTH AND TP.ITEM = TW.ITEM 
                            AND TP.STORE = TW.ITEM AND TP.MANAGER = TW.MANAGER)
...