Просто идентифицируя вашу команду SQL, можно увидеть, что в ней что-то не так, посмотрите:
SELECT
CAST(Pay_invoice_details.Barcode AS INT),
SUM(CAST(Pay_invoice_details.Total_items_price AS INT)) AS 'Total Payes',
SUM(CAST(Pay_invoice_details.Quantity AS INT) * CAST(Buy_invoice_details.Purchase_price AS INT)) AS 'Total Purchases',
CAST(Pay_invoice_details.Invoice_date AS DATE),
CAST(Buy_invoice_details.Barcode AS INT),
CAST(Buy_invoice_details.Invoice_date AS DATE),
SUM(CAST(Payouts_details.Total_amount AS INT)) AS 'Total Payouts'
FROM
Pay_invoice_details,
Buy_invoice_details,
Payouts_details
where
Pay_invoice_details.Barcode=Buy_invoice_details.Barcode and
Pay_invoice_details.Invoice_date,
Buy_invoice_details.Invoice_date,
Payouts_details.Invoice_date
between '" + from.Value.ToString("yyyy-MM-dd") + "' and'" + to.Value.ToString("yyyy-MM-dd") + "'
В предложении WHERE
вы используете список из 3 столбцов для сравнения сдиапазон дат с использованием BETWEEN
.Это не так, как это работает.Если вы намереваетесь рассмотреть 1-й столбец и если он нулевой, рассмотрите второй, а если он также нулевой, рассмотрите 3-й, вам следует использовать функцию COALESCE
.Вот так:
(...)
where
Pay_invoice_details.Barcode=Buy_invoice_details.Barcode and
COALESCE(
Pay_invoice_details.Invoice_date,
Buy_invoice_details.Invoice_date,
Payouts_details.Invoice_date
) between '" + from.Value.ToString("yyyy-MM-dd") + "' and'" + to.Value.ToString("yyyy-MM-dd") + "'