Присоединение к нескольким подзапросам - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь использовать несколько запросов на выборку, чтобы объединить несколько предложений WHERE для одних и тех же данных в 1 запрос.Это работает, когда я присоединяюсь к 1 подзапросу, но как только я пытаюсь присоединиться ко второму, я получаю синтаксическую ошибку, через которую мне трудно работать.Любая помощь будет принята с благодарностью!

SELECT [CONSULTATION].Theatre
  ,[CONSULTATION].[Order Type]
  ,[CONSULTATION].[Service Type]
  ,[CONSULTATION].[ORDERS]
  ,[CONSULTATION].[CONSULTATION DAYS]
  ,[DESIGN].[DESIGN DAYS]
FROM (
  SELECT [Order Metrics].Theatre
    ,[Order Metrics].[Order Type]
    ,[Order Metrics].[Service Type]
    ,Count([Order Metrics].[Order ID]) AS ORDERS
    ,ROUND(AVG(([Order Metrics].HOURS) / 24), 1) AS [CONSULTATION DAYS]
  FROM [Order Metrics]
  WHERE (
      (([Order Metrics].[Order Status]) = "closed")
      AND ((DateDiff("d", [Order Metrics] ! [Date Created], Now())) < 366)
      AND (
        (
          [ORDER METRICS] ! FROM
          ) = "CONSULTATION"
        )
      )
  GROUP BY [Order Metrics].Theatre
    ,[Order Metrics].[Order Type]
    ,[Order Metrics].[Service Type]
  HAVING LEN([ORDER METRICS].[THEATRE]) > 1
  ) AS CONSULTATION
INNER JOIN (
  SELECT [Order Metrics].Theatre
    ,[Order Metrics].[Order Type]
    ,[Order Metrics].[Service Type]
    ,Count([Order Metrics].[Order ID]) AS ORDERS
    ,ROUND(AVG(([Order Metrics].HOURS) / 24), 1) AS [DESIGN DAYS]
  FROM [Order Metrics]
  WHERE (
      (([Order Metrics].[Order Status]) = "closed")
      AND ((DateDiff("d", [Order Metrics] ! [Date Created], Now())) < 366)
      AND (
        (
          [ORDER METRICS] ! FROM
          ) = "DESIGN"
        )
      )
  GROUP BY [Order Metrics].Theatre
    ,[Order Metrics].[Order Type]
    ,[Order Metrics].[Service Type]
  HAVING LEN([ORDER METRICS].[THEATRE]) > 1
  ) AS DESIGN ON ([CONSULTATION].Theatre = [DESIGN].THEATRE)
  AND ([CONSULTATION].[Order Type] = [DESIGN].[ORDER TYPE])
  AND ([CONSULTATION].[Service Type] = [DESIGN].[SERVICE TYPE])
INNER JOIN (
  SELECT [Order Metrics].Theatre
    ,[Order Metrics].[Order Type]
    ,[Order Metrics].[Service Type]
    ,Count([Order Metrics].[Order ID]) AS ORDERS
    ,ROUND(AVG(([Order Metrics].HOURS) / 24), 1) AS [QUOTE REQUEST DAYS]
  FROM [Order Metrics]
  WHERE (
      (([Order Metrics].[Order Status]) = "closed")
      AND ((DateDiff("d", [Order Metrics] ! [Date Created], Now())) < 366)
      AND (
        (
          [ORDER METRICS] ! FROM
          ) = "QUOTE REQUEST"
        )
      )
  GROUP BY [Order Metrics].Theatre
    ,[Order Metrics].[Order Type]
    ,[Order Metrics].[Service Type]
  HAVING LEN([ORDER METRICS].[THEATRE]) > 1
  ) AS [QUOTE REQUEST] ON ([CONSULTATION].Theatre = [QUOTE REQUEST].THEATRE)
  AND ([CONSULTATION].[Order Type] = [QUOTE REQUEST].[ORDER TYPE])
  AND ([CONSULTATION].[Service Type] = [QUOTE REQUEST].[SERVICE TYPE]);

1 Ответ

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

Рассматривали ли вы сохранение каждого запроса отдельно, проверяя, чтобы они имели одинаковое количество столбцов с одинаковым типом данных, а затем объединяя их все вместе с запросом объединения?Я нахожу это гораздо более легким в обслуживании ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...