Нужно объединить две группы по запросам - PullRequest
2 голосов
/ 04 ноября 2011

Есть ли способ объединить эти два запроса в один запрос

SELECT siftBal.SystemName,convert(varchar(10),siftBal.Date,110) as WorkDate,SUM(siftBal.CashIn) as CashIn,SUM(siftBal.CashOut) as CashOut,
(SUM(siftBal.CashIn) - SUM(siftBal.CashOut)) as NetCash
FROM  tblShiftBalanceDetail siftBal 
WHERE siftBal.Date  between '10-28-2011' and '11-04-2011' group by convert(varchar(10),siftBal.Date,110),SystemName

SELECT  convert(varchar(10),custPlay.DatePlayed,110) as WorkDate,SUM(custPlay.TotalPoints) as EntriesIn,SUM(custPlay.TotalWin) as Payout,
(SUM(custPlay.TotalPoints)*0.01) - SUM(custPlay.TotalWin) as NetProfit, 
(SUM(custPlay.TotalWin)*100/SUM(custPlay.TotalPoints))*100 as Payout
FROM  [tblCustomerPlay] custPlay 
WHERE custPlay.DatePlayed between '10-28-2011' and '11-04-2011' group by convert(varchar(10),custPlay.DatePlayed,110)

Ответы [ 4 ]

0 голосов
/ 08 ноября 2011

В первом запросе группы я добавил пустой столбец «Выплата», а во втором запросе добавил пустой столбец «SystemName».

SELECT  siftBal.SystemName ,
            CONVERT(VARCHAR(10), siftBal.Date, 110) AS WorkDate ,
            SUM(siftBal.CashIn) AS CashIn ,
            SUM(siftBal.CashOut) AS CashOut ,
            ( SUM(siftBal.CashIn) - SUM(siftBal.CashOut) ) AS NetCash,
            '' AS 'Payout'
    FROM    tblShiftBalanceDetail siftBal
    WHERE   siftBal.Date BETWEEN '10-28-2011'
                         AND     '11-04-2011'
    GROUP BY CONVERT(VARCHAR(10), siftBal.Date, 110) ,
            SystemName
   UNION ALL
    SELECT  '' AS 'SystemName',
            CONVERT(VARCHAR(10), custPlay.DatePlayed, 110) AS WorkDate ,
            SUM(custPlay.TotalPoints) AS EntriesIn ,
            SUM(custPlay.TotalWin) AS Payout ,
            ( SUM(custPlay.TotalPoints) * 0.01 ) - SUM(custPlay.TotalWin) AS NetProfit ,
            ( SUM(custPlay.TotalWin) * 100 / SUM(custPlay.TotalPoints) ) * 100 AS Payout
    FROM    [tblCustomerPlay] custPlay
    WHERE   custPlay.DatePlayed BETWEEN '10-28-2011'
                                AND     '11-04-2011'
    GROUP BY CONVERT(VARCHAR(10), custPlay.DatePlayed, 110)
0 голосов
/ 04 ноября 2011

Предполагая, что они имеют одинаковое количество и тип столбцов, вы можете использовать UNION:

select foo, bar from table1
union
select foo, bar from tabe2
0 голосов
/ 04 ноября 2011
SELECT
    entries.EntriesIn
  , entries.NetProfit
  , entries.Payout
  , entries.Perchentage
  , siftBal.SystemName
  , siftBal.WorkDate
  , siftBal.TotalCashIn
  , siftBal.TotalCashout
  , NetCash
FROM
    ( SELECT
        shift.SystemName
      , CONVERT(VARCHAR(10), shift.Date, 110) AS WorkDate
      , SUM(shift.CashIn) AS TotalCashIn
      , SUM(shift.CashOut) AS TotalCashout
      , ( SUM(shift.CashIn) - SUM(shift.CashOut) ) AS NetCash
      FROM
        tblShiftBalanceDetail AS shift
      WHERE
        shift.Date BETWEEN '10-28-2011' AND '11-03-2011'
      GROUP BY
        CONVERT(VARCHAR(10), shift.Date, 110)
      , shift.SystemName ) AS siftBal
    JOIN ( SELECT
            CONVERT(VARCHAR(10), custPlay.DatePlayed, 110) AS WorkDate
          , SUM(custPlay.TotalPoints) AS EntriesIn
          , SUM(custPlay.TotalWin) AS Payout
          , ( SUM(custPlay.TotalPoints) * 0.01 ) - SUM(custPlay.TotalWin) AS NetProfit
          , ( SUM(custPlay.TotalWin) * 100 / SUM(custPlay.TotalPoints) ) * 100 AS Perchentage
           FROM
            [tblCustomerPlay] custPlay
           WHERE
            custPlay.DatePlayed BETWEEN '10-28-2011'
                                AND     '11-04-2011'
           GROUP BY
            CONVERT(VARCHAR(10), custPlay.DatePlayed, 110) ) entries ON entries.WorkDate = siftBal.WorkDate 
0 голосов
/ 04 ноября 2011

Если вы хотите, чтобы два набора результатов были вместе:

[query 1]
UNION ALL
[query 2]
...