MonthEnd.gif (3102 bytes)

Values of All Dates In Between

When you select a "from month" and "to month", the values of all the months in between are available to you as the programmer. These are useful in Pivot tables in Access / VB or the Cross-Tab function in SQL Server

Access / Visual Basic

Sql = Sql + "Select ORDER_DETAIL.PROD_ID, PROD_MASTER.PROD_DESCR " ' Always leave a space bar at the end Sql = Sql + "From ORDER_DETAIL "
Sql = Sql + "Left Outer Join PROD_MASTER on "
Sql = Sql + "ORDER_DETAIL.PROD_ID=PROD_MASTER.PROD_ID "
Sql = Sql + "Where INVOICE_DATE between #" ' Don't forget the # here
Sql = Sql + Format(MonthEnd1.FromDateAsDate, "mm/dd/yy") + "# and #"
Sql = Sql + Format(MonthEnd1.ToDateAsDate, "mm/dd/yy") + "# "
Sql = Sql + "Group by ORDER_DETAIL.PROD_ID,PROD_MASTER.PROD_DESCR "
Sql = Sql + "PIVOT format(INVOICE_DATE,""mmm/yy"") "   

' SQL=SQL+'in ("
'For i = MonthEnd1.FromDateAsColumn To MonthEnd1.ToDateAsColumn
'Sql = Sql + """" + Format(MonthEnd1.MonthBegin(i), "mmm/yy") + ""","
'Next i
'Sql = Left(Sql, Len(Sql) - 1) + ")"

' THE LAST PART of ( in ...) IS NOT USUALLY NECESSARY, BUT PROVIDED
' IN CASE YOU NEED IT FOR OTHER PURPOSES.
' IT MORE OR LESS ACTS AS ANOTHER "WHERE" STATEMENT
' FOR ACCESS PIVOT TABLES

Access Result:

TRANSFORM sum(QTY) Select ORDER_DETAIL.PROD_ID, PROD_MASTER.PROD_DESCR From ORDER_DETAIL Left Outer Join PROD_MASTER on ORDER_DETAIL.PROD_ID=PROD_MASTER.PROD_ID Where INVOICE_DATE between #10/01/00# and #03/31/01# Group by ORDER_DETAIL.PROD_ID,PROD_MASTER.PROD_DESCR PIVOT format(INVOICE_DATE,"mmm/yy")

SQL Server

' THIS IS HOW YOU DO A PIVOT-TABLE, OR CROSS TAB in SQL SERVER

Sql = "Select BILL_ID,ORDERS.PROD_ID, " ' Always leave a space bar at the end
For i = MonthEnd1.FromDateAsColumn To MonthEnd1.ToDateAsColumn
Sql = Sql + "SUM(CASE WHEN DATE_INV BETWEEN """
Sql = Sql + Format(MonthEnd1.MonthBegin(i), "mm/dd/yy") + """ and """
Sql = Sql + Format(MonthEnd1.MonthEnd(i), "mm/dd/yy") + """ "
Sql = Sql + "Then QTY_SHP ELSE 0 END ) "
Sql = Sql + "As "
Sql = Sql + Format(MonthEnd1.MonthBegin(i), "mmmyy") + ", "
Next i
Sql = Left(Sql, Len(Sql) - 2) + " " ' We added a space bar here, so strip it off and the comma
Sql = Sql + "From ORDERS "
Sql = Sql + "Left Outer Join PROD_MASTER on "
Sql = Sql + "ORDERS.PROD_ID=PROD_MASTER.PROD_ID "
Sql = Sql + "Where INVOICE_DATE between """
Sql = Sql + Format(MonthEnd1.FromDateAsDate, "mm/dd/yy") + """ and """
Sql = Sql + Format(MonthEnd1.ToDateAsDate, "mm/dd/yy") + """ "
Sql = Sql + "Group by BILL_ID,ORDERS.PROD_ID "

NOTE: In SQL Server, you DO want the last 'WHERE' statement to limit your search to the least number of records

SQL Server Result:

Select BILL_ID,ORDERS.PROD_ID, SUM(CASE WHEN DATE_INV BETWEEN "10/01/00" and "10/31/00" Then QTY_SHP ELSE 0 END ) As Oct00, SUM(CASE WHEN DATE_INV BETWEEN "11/01/00" and "11/30/00" Then QTY_SHP ELSE 0 END ) As Nov00, SUM(CASE WHEN DATE_INV BETWEEN "12/01/00" and "12/31/00" Then QTY_SHP ELSE 0 END ) As Dec00, SUM(CASE WHEN DATE_INV BETWEEN "01/01/01" and "01/31/01" Then QTY_SHP ELSE 0 END ) As Jan01, SUM(CASE WHEN DATE_INV BETWEEN "02/01/01" and "02/28/01" Then QTY_SHP ELSE 0 END ) As Feb01, SUM(CASE WHEN DATE_INV BETWEEN "03/01/01" and "03/31/01" Then QTY_SHP ELSE 0 END ) As Mar01 From ORDERS Left Outer Join PROD_MASTER on ORDERS.PROD_ID=PROD_MASTER.PROD_ID Where INVOICE_DATE between "10/01/00" and "03/31/01" Group by BILL_ID,ORDERS.PROD_ID