Неправильный синтаксис рядом с ключевым словом ‘GROUP’ — MA

#sql #tsql

#sql #tsql

Вопрос:

Я пытаюсь перенести все мои движения инвентаря в корзину 2015 или 2016 года. В моей части запроса From Select я заставляю его работать, но он дает мне 2 строки для каждого элемента с кол-во в 2015 году и 0 в 2016 году в первой строке и 0 в 2015 году и кол-во в 2016 году во второй строке. Поэтому я подумал, что затем могу запросить оператор select и group, чтобы получить одну строку для каждого элемента. Но я получаю сообщение об ошибке «Неправильный синтаксис рядом с ключевым словом ‘GROUP'». Может ли кто-нибудь направить меня в правильном направлении? Ошибка возникает во второй группе за пределами предложения From . Спасибо.

 SELECT [Item]
    ,[Item Desc]
    ,sum[2015 Usage]
    ,sum[2016 Usage]

FROM (SELECT 
          mtm.[item] 'Item'
          ,im.[description] 'Item Desc'
          ,case when year(convert(varchar(10), convert(date,mtm.[trans_date],1),101))='2015' then sum(mtm.[qty]) else 0 end '2015 Usage'
          ,case when year(convert(varchar(10), convert(date,mtm.[trans_date],1),101))='2016' then sum(mtm.[qty]) else 0 end '2016 Usage'

  FROM [ITEC_App].[dbo].[matltran_mst] mtm, [ITEC_App].[dbo].[item_mst] im

  WHERE
    mtm.[item] = im.[item]
    and
    mtm.[trans_type] NOT IN ('A', 'B', 'C', 'F', 'G', 'H', 'M', 'N', 'R')
    and
    mtm.[ref_type] NOT IN ('P')

  GROUP BY
    mtm.[item]
    ,im.[description]
    ,year(convert(varchar(10), convert(date,mtm.[trans_date],1),101)))

GROUP BY
    [Item]
    ,[Item Desc]
  

Комментарии:

1. Вам нужно псевдонимное имя для вашего подзапроса

2. @juergend прав. добавьте «x» после трех закрывающих скобок и перед последней группой по

Ответ №1:

Ваш подзапрос выглядит следующим образом:

   (
  SELECT . . .
  GROUP BY
    mtm.[item]
    ,im.[description]
    ,year(convert(varchar(10), convert(date,mtm.[trans_date],1),101))
 )
  

В SQL Server для всех подзапросов требуется псевдоним таблицы. Итак, вам просто нужно добавить один:

   (
  SELECT . . .
  GROUP BY
    mtm.[item]
    ,im.[description]
    ,year(convert(varchar(10), convert(date,mtm.[trans_date],1),101))
 ) i
  

Комментарии:

1. В SQL Server? Какие базы данных не требуют псевдонима?

2. Спасибо! У меня был псевдоним, но у меня был ЗАКАЗ ПО выпуску, и я убрал его, думая о чем-то другом!

3. @Bohemian . , , Oracle для одного.