How can I obtain "Month By Month" data? I want to show a sum for each month that falls between the variables @startdate and @enddate - I think my issue is stemming from the Group By I have to add at the end so SSMS does not bark at me.

Current output:

Year Month Cash
1900  01   300


I want to see:

Year    Month   Cash
2016    01      150
2016    02      50
2016    03      100


Here is query I attempt:

Declare @startdate date = '20160101', @enddate date = '20160331'

SELECT
YEAR(satDate) [Year], MONTH(satDate) [Month],
SUM(ISNULL(A.truckrv,0)-ISNULL(A.DC,0)) As CashAmt
FROM
(
    SELECT
    ZT1.empName,
    SUM(ISNULL(ZT1.[truckrv],0)) AS truckrv,
    drivedate As TDate,
    0 As satDate,
    0 As DC
    FROM truck AS ZT1
    WHERE ZT1.[drivedate] &gt;= @startdate
    AND ZT1.[drivedate] &lt;= @enddate
    GROUP BY ZT1.empName, ZT1.drivedate
    UNION ALL
    Select
    t1.empName,
    0 As Tdate,
    satDate
    ,0 As truckrv
    ,SUM(ISNULL(t1.DC,0)) As DC
    FROM car t1
    WHERE t1.[satDate] &gt;= @startdate
    AND t1.[satDate] &lt;= @enddate
    Group By t1.empName, t1.satDate
) AS A
GROUP BY A.satDate


How should this query be altered in order to provide a "Month by Month" result set?
Likely what's happening here is that your second set of data (after the UNION ALL does not return any data, and so only the first part is returning anything. Because you are passing a 0 for the date, this is 1900-01-01. All of the results are going to get grouped for that date.

Here's a similar mockup, but this one returns data after the UNION ALL

DECLARE @t TABLE
    (
      C1 INT ,
      C2 DATETIME ,
      C3 INT
    );

INSERT  INTO @t
VALUES  ( 1, '2016-01-01', 100 )
,       ( 1, '2016-01-01', 250 )
,       ( 1, '2016-03-05', 200 )
,       ( 2, '2016-02-01', 200 )
,       ( 2, '2016-02-01', 500 )
,       ( 2, '2016-06-01', 200 );

SELECT  YEAR(C2) [Year] ,
        MONTH(C2) [Month] ,
        SUM(C3)
FROM    ( SELECT    0 AS C2 ,
                    SUM(C3) AS C3
          FROM      @t
          WHERE     C1 = 1
          GROUP BY  C2
          UNION ALL
          SELECT    C2 ,
                    SUM(C3) AS C3
          FROM      @t
          WHERE     C1 = 2
          GROUP BY  C2
        ) AS A
GROUP BY C2;