Using SQL is more involved, so I recommend using @gerlandog’s method instead.
Output:
Template:
[Daily Report:70, 30]
>TotalType|Total
@@DailyReport
SQL:
You will need to make some edits regarding your Tax Names. The Taxes used here are called T1 and T2. You you need to find/replace each with your Tax Names.
/******************************************************************************************/
/******************************************************************************************/
/*** ***/
/*** WORK PERIOD SUMMARY ***/
/*** ***/
/*** see USER SECTION (after declarations) to set Date for Report ***/
/*** ***/
/******************************************************************************************/
/******************************************************************************************/
/*****************************************/
/************* DO NOT TOUCH **************/
/***** Declarations & Initialization *****/
/*****************************************/
USE [SambaPOS4]
declare @int_WorkPeriod_ID int = 0
declare @var_WorkPeriod_ID varchar(7) = '0'
declare @dat_WorkPeriod_Beg Datetime = '9999-12-31 23:59:59'
declare @var_WorkPeriod_Beg varchar(19) = '9999-12-31 23:59:59'
declare @dat_WorkPeriod_End Datetime = '9999-12-31 23:59:59'
declare @var_WorkPeriod_End varchar(19) = '9999-12-31 23:59:59'
declare @dat_WorkPeriod_End_Check Datetime = '9999-12-31 23:59:59'
declare @int_Ticket_Beg int = 0
declare @var_Ticket_Beg varchar(6) = '0'
declare @int_Ticket_End int = 0
declare @var_Ticket_End varchar(6) = '0'
declare @int_N int = 0
--declare @dec_XR money = 1
declare @T1 money = 1
declare @T2 money = 1
/******************************************************************************************/
/******************************************************************************************/
/*** ***/
/*** USER SECTION (Begin) ***/
/*** set WorkPeriod Begin & End Dates ***/
/*** select Foreign Currency Exchange Rate ***/
/*** ***/
/******************************************************************************************/
/******************************************************************************************/
-- TODAY
set @dat_WorkPeriod_Beg = CONVERT(VARCHAR(10), GETDATE(), 120)
--set @dat_WorkPeriod_Beg = '2013-11-20'
set @dat_WorkPeriod_End = CONVERT(VARCHAR(10), DATEADD(day,1,@dat_WorkPeriod_Beg), 120)
-- OTHER DAY
--set @dat_WorkPeriod_Beg = '2014-02-12 06:59:19.193'
--set @dat_WorkPeriod_End = CONVERT(VARCHAR(10), DATEADD(day,1,@dat_WorkPeriod_Beg), 120)
--set @dat_WorkPeriod_End = '2014-02-13 00:00:44.653'
-- ForeignCurrency ExchangeRate
--SELECT @dec_XR = [ExchangeRate] FROM [dbo].[ForeignCurrencies] WHERE [Name] = 'USD'
-- Taxes
SELECT @T1 = [Rate] FROM [dbo].[TaxTemplates] WHERE [Name] = 'T1'
SELECT @T2 = [Rate] FROM [dbo].[TaxTemplates] WHERE [Name] = 'T2'
/******************************************************************************************/
/******************************************************************************************/
/*** ***/
/*** USER SECTION (End) ***/
/*** ***/
/******************************************************************************************/
/******************************************************************************************/
/*****************************************/
/************* DO NOT TOUCH **************/
/** Declarations for (in-memory) Tables **/
/*****************************************/
declare @tbl_Transactions table
(
[ID] INT IDENTITY(1,1) NOT NULL
,[TicketNumber] int
,[Date] Datetime
,[TotalAmount] money
,[TransactionDocument_Id] int
,[Amount] money
--,[Amount_USD] money
,[Name] varchar(255)
)
declare @tbl_Tx table
(
[ID] INT IDENTITY(1,1) NOT NULL
,[Date] Datetime
,[Ticket] int
,[T1] money
,[T2] money
,[Tax] money
,[Amount] money
,[TotalAmount] money
)
declare @tbl_Report table
(
[ID] INT IDENTITY(1,1) NOT NULL
,[Z_num] int
,[WP_Beg] Datetime
,[WP_End] Datetime
,[Ticket_Beg] int
,[Ticket_End] int
,[Total] money
--,[Total_USD] money
,[Total_Type] varchar(255)
)
declare @tbl_Sales table
(
[ID] INT IDENTITY(1,1) NOT NULL
,[Z_num] int
,[WP_Beg] Datetime
,[WP_End] Datetime
,[Ticket_Beg] int
,[Ticket_End] int
,[Total] money
--,[Total_USD] money
,[Total_Type] varchar(255)
)
declare @tbl_Incomes table
(
[ID] INT IDENTITY(1,1) NOT NULL
,[Z_num] int
,[WP_Beg] Datetime
,[WP_End] Datetime
,[Ticket_Beg] int
,[Ticket_End] int
,[Total] money
--,[Total_USD] money
,[Total_Type] varchar(255)
)
/*****************************************/
/************* CREATE REPORT *************/
/*****************************************/
select @int_WorkPeriod_ID = [Id] FROM [dbo].[WorkPeriods] where [StartDate] >= @dat_WorkPeriod_Beg and [EndDate] <= @dat_WorkPeriod_End
select @dat_WorkPeriod_Beg = [StartDate] FROM [dbo].[WorkPeriods] where [Id] = @int_WorkPeriod_ID
select @dat_WorkPeriod_End_Check = [EndDate] FROM [dbo].[WorkPeriods] where [Id] = @int_WorkPeriod_ID
select @dat_WorkPeriod_End =
case @dat_WorkPeriod_End_Check
when @dat_WorkPeriod_Beg then @dat_WorkPeriod_End
else @dat_WorkPeriod_End_Check
end
set @var_WorkPeriod_ID = right('0000000'+convert(varchar(7),@int_WorkPeriod_ID),7)
set @var_WorkPeriod_Beg = convert(varchar(19),@dat_WorkPeriod_Beg, 120)
set @var_WorkPeriod_End = convert(varchar(19),@dat_WorkPeriod_End, 120)
print @int_WorkPeriod_ID
print @dat_WorkPeriod_Beg
print @dat_WorkPeriod_End
print @dat_WorkPeriod_End_Check
/*****************************************/
/************* Transactions **************/
/*****************************************/
INSERT INTO @tbl_Transactions
SELECT
tkt.[TicketNumber]
,tkt.[Date]
,tkt.[TotalAmount]
,tkt.[TransactionDocument_Id]
,tx.[Amount]
--,tx.[Amount]/@dec_XR
,tx.[Name]
FROM [dbo].[Tickets] tkt
left join [dbo].[AccountTransactions] tx
on tkt.TransactionDocument_Id = tx.AccountTransactionDocumentId
WHERE tkt.[Date] >= @dat_WorkPeriod_Beg AND tkt.[Date] <= @dat_WorkPeriod_End
SELECT
@int_Ticket_Beg = min([TicketNumber])
,@int_Ticket_End = max([TicketNumber])
FROM @tbl_Transactions
set @var_Ticket_Beg = right('000000'+convert(varchar(6),@int_Ticket_Beg),6)
set @var_Ticket_End = right('000000'+convert(varchar(6),@int_Ticket_End),6)
print @int_Ticket_Beg
print @int_Ticket_End
/*****************************************/
/******************* Tx ******************/
/*****************************************/
INSERT INTO @tbl_Tx
SELECT DISTINCT
[Date] --[Date] Datetime
,[TicketNumber] --[Ticket] int
,0 --[T1] money
,0 --[T2] money
,0 --[Tax] money
,0 --[Amount] money
,0 --[TotalAmount] money
FROM @tbl_Transactions
WHERE coalesce([TotalAmount],0) > 0
ORDER BY [TicketNumber]
set @int_N = @int_Ticket_Beg
WHILE @int_N <= @int_Ticket_End
BEGIN
UPDATE @tbl_Tx SET
[TotalAmount] = (SELECT CASE WHEN EXISTS (SELECT TR.[TotalAmount] FROM @tbl_Transactions TR WHERE TR.[TicketNumber]=@int_N and TR.[Name] like 'Sale%')
THEN (SELECT TR.[TotalAmount] FROM @tbl_Transactions TR WHERE TR.[TicketNumber]=@int_N and TR.[Name] like 'Sale%')
ELSE (SELECT 0)
END)
, [Amount] = (SELECT CASE WHEN EXISTS (SELECT TR.[Amount] FROM @tbl_Transactions TR WHERE TR.[TicketNumber]=@int_N and TR.[Name] like 'Sale%')
THEN (SELECT TR.[Amount] FROM @tbl_Transactions TR WHERE TR.[TicketNumber]=@int_N and TR.[Name] like 'Sale%')
ELSE (SELECT 0)
END)
, [T1] = (SELECT CASE WHEN EXISTS (SELECT TR.[Amount] FROM @tbl_Transactions TR WHERE TR.[TicketNumber]=@int_N and TR.[Name] like 'T1%')
THEN (SELECT TR.[Amount] FROM @tbl_Transactions TR WHERE TR.[TicketNumber]=@int_N and TR.[Name] like 'T1%')
ELSE (SELECT 0)
END)
, [T2] = (SELECT CASE WHEN EXISTS (SELECT TR.[Amount] FROM @tbl_Transactions TR WHERE TR.[TicketNumber]=@int_N and TR.[Name] like 'T2%')
THEN (SELECT TR.[Amount] FROM @tbl_Transactions TR WHERE TR.[TicketNumber]=@int_N and TR.[Name] like 'T2%')
ELSE (SELECT 0)
END)
, [Tax] = (SELECT CASE WHEN EXISTS (SELECT TR.[Amount] FROM @tbl_Transactions TR WHERE TR.[TicketNumber]=@int_N and TR.[Name] like 'T1%')
THEN (SELECT TR.[Amount] FROM @tbl_Transactions TR WHERE TR.[TicketNumber]=@int_N and TR.[Name] like 'T1%')
ELSE (SELECT 0)
END)
+ (SELECT CASE WHEN EXISTS (SELECT TR.[Amount] FROM @tbl_Transactions TR WHERE TR.[TicketNumber]=@int_N and TR.[Name] like 'T2%')
THEN (SELECT TR.[Amount] FROM @tbl_Transactions TR WHERE TR.[TicketNumber]=@int_N and TR.[Name] like 'T2%')
ELSE (SELECT 0)
END)
WHERE [Ticket] = @int_N
set @int_N = @int_N + 1
END
--select * from @tbl_Transactions
--select * from @tbl_Tx
/*****************************************/
/****************** SALES ****************/
/*****************************************/
INSERT INTO @tbl_Sales
SELECT
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, sum([Amount])
--, sum([Amount])/@dec_XR
, 'Tax T1'
FROM @tbl_Transactions
WHERE [Name] like '%T1%'
INSERT INTO @tbl_Sales
SELECT
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, sum([Amount])
--, sum([Amount])/@dec_XR
, 'Tax T2'
FROM @tbl_Transactions
WHERE [Name] like '%T2%'
INSERT INTO @tbl_Sales
SELECT
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, sum([Amount])
--, sum([Amount])/@dec_XR
, 'Tax Total'
FROM @tbl_Transactions
WHERE [Name] like '%T1%' or [Name] like '%T2%'
INSERT INTO @tbl_Sales
SELECT
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, sum([Amount])
--, sum([Amount])/@dec_XR
, 'Sales Total Tax Excluded'
FROM @tbl_Transactions
WHERE [Name] like '%Sale%'
INSERT INTO @tbl_Sales
SELECT
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, sum([Amount])
--, sum([Amount])/@dec_XR
, 'SALES TOTAL'
FROM @tbl_Transactions
WHERE [Name] like '%Sale%' or [Name] like '%T1%' or [Name] like '%T2%'
/*****************************************/
/***************** INCOMES ***************/
/*****************************************/
INSERT INTO @tbl_Incomes
SELECT
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, sum(
CASE [Name]
WHEN 'Payment Transaction [Cash]' THEN [Amount]
WHEN 'Change Transaction [Cash]' THEN -1*[Amount]
ELSE 0 END
)
--, sum(
-- CASE [Name]
-- WHEN 'Payment Transaction [Cash]' THEN [Amount]
-- WHEN 'Change Transaction [Cash]' THEN -1*[Amount]
-- ELSE 0 END
-- )/@dec_XR
,'Cash'
FROM @tbl_Transactions
WHERE [Name] = 'Payment Transaction [Cash]' or [Name] = 'Change Transaction [Cash]'
--INSERT INTO @tbl_Incomes
--SELECT
-- @int_WorkPeriod_ID
--, @dat_WorkPeriod_Beg
--, @dat_WorkPeriod_End
--, @int_Ticket_Beg
--, @int_Ticket_End
--, sum(
-- CASE [Name]
-- WHEN 'Payment Transaction [Cash USD]' THEN [Amount]
-- WHEN 'Change Transaction [Cash USD]' THEN -1*[Amount]
-- ELSE 0 END
-- )
--, sum(
-- CASE [Name]
-- WHEN 'Payment Transaction [Cash USD]' THEN [Amount]
-- WHEN 'Change Transaction [Cash USD]' THEN -1*[Amount]
-- ELSE 0 END
-- )/@dec_XR
--,'Cash USD'
--FROM @tbl_Transactions
--WHERE [Name] = 'Payment Transaction [Cash USD]' or [Name] = 'Change Transaction [Cash USD]'
INSERT INTO @tbl_Incomes
SELECT
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, sum([Amount])
--, sum([Amount])/@dec_XR
,'Credit Card'
FROM @tbl_Transactions
WHERE [Name] = 'Payment Transaction [Credit Card]'
INSERT INTO @tbl_Incomes
SELECT
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, isnull(sum([Amount]),0)
--, isnull(sum([Amount]),0)/@dec_XR
,'Customer Account'
FROM @tbl_Transactions
WHERE [Name] like '%Customer Account Transaction%'
INSERT INTO @tbl_Incomes
SELECT
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, isnull(sum([Debit]),0)
--, isnull(sum([Debit]),0)/@dec_XR
,'Customer Account Cash Payments'
FROM [dbo].[AccountTransactionValues] txval
left join [dbo].[AccountTransactions] tx
on [AccountTransactionId] = txval.[Id]
where [Debit] > 0
and [Date] >= @dat_WorkPeriod_Beg
and [Date] <= @dat_WorkPeriod_End
and txval.[Name] like 'Cash Payment%'
INSERT INTO @tbl_Incomes
SELECT
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, isnull(sum([Debit]),0)
--, isnull(sum([Debit]),0)/@dec_XR
,'Customer Account CC Payments'
FROM [dbo].[AccountTransactionValues] txval
left join [dbo].[AccountTransactions] tx
on [AccountTransactionId] = txval.[Id]
where [Debit] > 0
and [Date] >= @dat_WorkPeriod_Beg
and [Date] <= @dat_WorkPeriod_End
and txval.[Name] like 'Credit Card Payment%'
INSERT INTO @tbl_Incomes
SELECT
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, sum([Total])
--, sum([Total_USD])
,'INCOME TOTAL'
FROM @tbl_Incomes
/*****************************************/
/****************** REPORT ***************/
/*****************************************/
INSERT INTO @tbl_Report
(
[Z_num]
,[WP_Beg]
,[WP_End]
,[Ticket_Beg]
,[Ticket_End]
,[Total]
--,[Total_USD]
,[Total_Type]
) VALUES (
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, null
--, null
,'*---------- SALES'
)
INSERT INTO @tbl_Report
select
[Z_num]
,[WP_Beg]
,[WP_End]
,[Ticket_Beg]
,[Ticket_End]
,[Total]
--,[Total_USD]
,[Total_Type]
FROM @tbl_Sales ORDER BY [ID]
INSERT INTO @tbl_Report
(
[Z_num]
,[WP_Beg]
,[WP_End]
,[Ticket_Beg]
,[Ticket_End]
,[Total]
--,[Total_USD]
,[Total_Type]
) VALUES (
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, null
--, null
,'*-------- INCOMES'
)
INSERT INTO @tbl_Report
select
[Z_num]
,[WP_Beg]
,[WP_End]
,[Ticket_Beg]
,[Ticket_End]
,[Total]
--,[Total_USD]
,[Total_Type]
FROM @tbl_Incomes ORDER BY [ID]
INSERT INTO @tbl_Report
(
[Z_num]
,[WP_Beg]
,[WP_End]
,[Ticket_Beg]
,[Ticket_End]
,[Total]
--,[Total_USD]
,[Total_Type]
) VALUES (
@int_WorkPeriod_ID
, @dat_WorkPeriod_Beg
, @dat_WorkPeriod_End
, @int_Ticket_Beg
, @int_Ticket_End
, null
--, null
,'*------------ END'
)
SELECT
[Total_Type]
,[Total]
--,[Total_USD]
FROM @tbl_Report ORDER BY [ID]