2014-01-03 4 views
0

Я этот запрос, который получаетОбъединения запросов в SQL Server

select top 20 
    Articulo.IdArticulo, 
    VentasT30 as VentasPorMes, 
    MovStockTotal.Stock 
from 
    VentasMensuales 
join 
    MovStockTotal on MovStockTotal.IdArticulo = Articulo.IdArticulo 
where 
    Mes = 12 and IdDeposito = 30 
order by 
    VentasT30 desc 

В основном, он получает топ статей продаж в моей базе данных, их ежемесячные продажи (VentasT30, магазины в таблице VentasMensuales) и количество доступный для продажи в любом магазине (IdDeposito идентифицирует хранилище в таблице MovStockTotal, в настоящее время я проверяю только для магазина № 30).

Таблица MovStockTotal соответствует текущим номерам акций для каждой статьи в каждом магазине, поэтому каждая статья будет иметь одну строку для магазина в магазине (IdDeposito) № 30, один для акций в магазине № 40 (так далее) и один для основного депо, №2.

Я хочу также знать, что акции доступны в главном распределительном концентраторе для всех магазинов моего клиента. Он хранится в той же таблице (MovStockTotal) в IdDeposito = 2.

Я не уверен, как это сделать. Я попытался присоединиться к ним в качестве

SELECT 
    A.*, B.Stock 
FROM 
    (select top 20 
     Articulo.IdArticulo, IdSeccion as Seccion, 
     Descripcion, VentasT30 as VentasPorMes, 
     MovStockTotal.Stock 
    from 
     VsBoremix.dbo.VentasMensuales 
    join 
     VsBoremix.dbo.Articulo on articulo.IdArticulo = VentasMensuales.IdArticulo 
    join 
     VsBoremix.dbo.MovStockTotal on MovStockTotal.IdArticulo = Articulo.IdArticulo 
    where 
     Mes = 12 and IdSeccion = 101 and IdDeposito = 30 
    order by 
     VentasT30 desc 
    GROUP BY [IdArticulo]) A 
LEFT JOIN 
    (SELECT 
     [IdArticulo] Stock 
    where 
     IdDeposito = 2 as StockT20 
    FROM 
     VsBoremix.dbo.MovStockTotal 
    GROUP BY 
     [IdArticulo]) B ON A.[IdArticulo] = B.[IdArticulo] 

Я скопировал структуру, что с другой такой же вопрос я нашел here, но я на самом деле не совсем уверен, что я делаю или что изменить там, чтобы сделать его работу ...

в частности, ошибки

Msg 156, Level 15, State 1, Line 7
Неправильный синтаксис около 'GROUP' ключевое слово.
Msg 156, Level 15, State 1, Line 9
Неверный синтаксис рядом с ключевым словом «как».

В случае, если не ясно, первый запрос, который уже работает, возвращает

IdArticulo VentasPorMes Stock 
03-00043   53   12 
03-00044   25   5 
03-00049   41   22 

Я хочу, чтобы показать

IdArticulo VentasPorMes Stock StockT20 
03-00043   53   12   30 
03-00044   25   5   25 
03-00049   41   22   40 
+3

'SELECT [IdArticulo] запаса, где IdDeposito = 2, как StockT20 ОТ VsBoremix.dbo.MovStockTotal GROUP BY [IdArticulo]' не отформатированный правильно. где caluse находится до этого. Правильный синтаксис - это Select, FROM, WHERE, GROUP BY, HAVING. При всех подборах выбора производительность может стать проблемой с течением времени. Вероятно, лучший способ построить это. – xQbert

ответ

0

коррекций ПРИМЕНЯЮТСЯ:

  1. перемещаемых от этого он до того, где налево присоединяется вспомогательная таблица.
  2. удален как StockT20, где предложение в левом соединении. (вы не можете использовать псевдонимы где-либо)

Вопросы: Я не рассматривал проблемы производительности, которые могут существовать. Я не смотрел, есть ли другие проблемы помимо ошибок синтаксиса. .

SELECT A.*, B.Stock 
FROM 
    (SELECT top 20 Articulo.IdArticulo, IdSeccion as Seccion, 
    Descripcion, VentasT30 as VentasPorMes, MovStockTotal.Stock 
    FROM VsBoremix.dbo.VentasMensuales 
    INNER JOIN VsBoremix.dbo.Articulo 
    on articulo.IdArticulo = VentasMensuales.IdArticulo 
    INNER JOIN VsBoremix.dbo.MovStockTotal 
    on MovStockTotal.IdArticulo = Articulo.IdArticulo 
    WHERE Mes = 12 
    and IdSeccion = 101 
    and IdDeposito = 30 
    ORDER BY VentasT30 desc 
    GROUP BY [IdArticulo]) A 
LEFT JOIN 
    (SELECT [IdArticulo] as Stock 
    FROM VsBoremix.dbo.MovStockTotal 
    WHERE IdDeposito = 2 
    GROUP BY [IdArticulo]) B 
    ON A.[IdArticulo] = B.[IdArticulo] 
+0

Я получаю неправильные синтаксические ошибки рядом с «GROUP» и рядом с «B» с вашим кодом ... – ConnorU

Смежные вопросы