'Выражение не булева типа, указанное в контексте, где ожидается условие, рядом с', '.' когда дата между - PullRequest
0 голосов
/ 25 апреля 2018

Я создаю SQL-запрос и хочу сделать отчет о прибылях и убытках. но у меня есть эта ошибка в моем запросе:

'Выражение не булева типа, указанное в контексте, где ожидается условие, рядом с', '.'

da = new SqlDataAdapter(
"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") + "'",
sqlcon);

любая помощь, пожалуйста спасибо заранее

1 Ответ

0 голосов
/ 25 апреля 2018

Просто идентифицируя вашу команду 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") + "'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...