2017-01-04 4 views
0

Я довольно новый на SQL! У меня есть два запроса из разных таблиц. Это мой первый запрос:SQL: Объединить два разных запроса

SELECT cli.CLIENTE as clientet,cli.RAZON as nom, 
     SUM(distinct par.[RECAPTACIO]*0.9) AS recaudacionSINIVA, 
     SUM(distinct par.canvi) as cambiocargado, 
     SUM(distinct par.consum) as CC_recaptacio,count(distinct par.DATA) as visita, 
     SUM((c.quantitat + c.caixes * c.uxcaja) * c.pvp) as CC_Caducados 

FROM [V30].[dbo].[parmaq] as par,[V30].[dbo].[clientes] as cli , V30.dbo.parcons as c 
    where cli.CLIENTE=par.EMPRESA and par.enllas=c.enllas 
    and par.data > '13-11-2015' and par.data < '20-11-2015' 
    group by cli.CLIENTE,cli.RAZON 

И это результат: enter image description here

Это мой второй запрос:

SELECT cli.cliente as clientet, cli.RAZON, SUM(distinct m1.IMPORTE) as FACTURACION, 
     SUM(distinct m2.coste * m2.canti) as CC_facturacio 
FROM [V30].[dbo].[clientes] as cli, [V30].[dbo].[MESTA1] as m1,V30.dbo.MESTA2 as m2 
     where m2.albaran=m1.albaran and m1.CLIENTE=cli.CLIENTE 
     and m1.FECHA > '13-11-2015' and m1.FECHA < '30-11-2015' 
     group by cli.CLIENTE,cli.razon order by cli.cliente 

И результат второго запроса: enter image description here

На sql нет способа связывания таблиц с prim ary ключ! и результаты запросов 1 и 2 в порядке. То, что я хочу сделать, это комбинировать результаты, используя столбец «clientet». Я должен сказать, что вы можете получить различное количество строк.

Цель состоит в том, чтобы получить всю эту информацию по тому же результату. Например, если «clientet» имеет результаты по обоим запросам, конечным результатом должны быть все столбцы из первого запроса + «FACTURACION» и «CC_facturacio» из второго запроса.

Надеюсь, вы можете мне помочь, я пытался использовать Внутренние соединения и подзапросы, но нет способа получить это.

+0

UNION ALL? (Некоторые столбцы NULL необходимы во втором запросе.) – jarlh

+0

Будет ли такой же клиентский набор (тот же идентификатор) когда-либо в результате обоих запросов? Возможно ли, например, что клиент с клиентом 101500 появляется в результатах обоих запросов? –

+0

** Сторона примечания: ** Прекратите использовать соединения старого стиля. Явные объединения являются частью ANSI-SQL более 20 лет. –

ответ

1

Два варианта:

  1. Как jarlh предложил, вы могли бы сделать союз до тех пор, как вы выразились заполнители в каждом запросе для недостающих столбцов, которые не существуют и убедитесь, что они находятся в том же заказ.

  2. Вы можете выполнить полное внешнее соединение двух ваших запросов. Возможно, вы захотите добавить коалесценцию друг к другу в зависимости от того, хотите ли вы, чтобы нули отображались для столбцов, когда строка не существует в обеих таблицах.

В приведенном ниже примере предполагается, clientet является соединение колонка:

SELECT COALESCE(TBL_1.clientet, TBL_2.clientet) as clientet 
    , TBL_1.nom 
    , TBL_1.recaudacionSINIVA 
    , TBL_1.cambiocargado 
    , TBL_1.CC_recaptacio 
    , TBL_1.visita 
    , TBL_1.CC_Caducados 
    , TBL_2.FACTURACION 
    , TBL_2.CC_facturacio 
FROM 

     (SELECT cli.CLIENTE as clientet 
      , cli.RAZON as nom 
      , SUM(distinct par.[RECAPTACIO]*0.9) AS recaudacionSINIVA 
      , SUM(distinct par.canvi) as cambiocargado 
      , SUM(distinct par.consum) as CC_recaptacio 
      , count(distinct par.DATA) as visita 
      , SUM((c.quantitat + c.caixes * c.uxcaja) * c.pvp) as CC_Caducados  
     FROM [V30].[dbo].[parmaq] as par,[V30].[dbo].[clientes] as cli , V30.dbo.parcons as c 
      where cli.CLIENTE=par.EMPRESA and par.enllas=c.enllas 
      and par.data > '13-11-2015' and par.data < '20-11-2015' 
      group by cli.CLIENTE,cli.RAZON) TBL_1 

FULL OUTER JOIN 

     (SELECT cli.cliente as clientet 
      , cli.RAZON 
      , SUM(distinct m1.IMPORTE) as FACTURACION 
      , SUM(distinct m2.coste * m2.canti) as CC_facturacio 
     FROM [V30].[dbo].[clientes] as cli, [V30].[dbo].[MESTA1] as m1,V30.dbo.MESTA2 as m2 
      where m2.albaran=m1.albaran and m1.CLIENTE=cli.CLIENTE 
      and m1.FECHA > '13-11-2015' and m1.FECHA < '30-11-2015' 
      group by cli.CLIENTE,cli.razon) TBL_2 

    ON TBL_1.clientet = TBL_2.clientet 
ORDER BY COALESCE(TBL_1.clientet, TBL_2.clientet) 
+0

Это полностью работает, просто пришлось скопировать пасту! Спасибо огромное! – talendguy

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