UNION не делает мои результаты столбца sql для запроса ODBC - PullRequest
0 голосов
/ 15 октября 2019

У меня есть SQL-запрос, в котором я пытаюсь добавить Date для вывода в столбец, но он дает мне следующую ошибку

тип столбцов результата запросов в UNION не делаютматч. Несовпадение с номером пункта выбора 3.

Кто-нибудь может пролить свет на то, что может быть не так с моим кодом в соответствии с двумя примерами ниже?

Это код, который яя пытаюсь обновить

SELECT DIH_DBTNO as Debtor, JT_DES as Description, DIH_DATE as Date,

CASE WHEN JT_TYPE=73 THEN JT_ITMNO
WHEN JT_TYPE=76 THEN 'LABOUR'
ELSE 'WORK SHEET' END as Item,

SUM(JT_AQTYHOURS) AS 'Qty',
SUM(JT_ORDERTOTAL) AS 'Sales',
SUM(JT_ACOST*JT_AQTYHOURS) AS 'Cost'


FROM Debtors_Invoice_Header_File, Job_Master_File, Job_Transaction_File
WHERE JOB_NO = DIH_JOBNO
AND JOB_UNIQUE = JT_LINK
AND JT_INVOICED > 0
AND JT_TYPE <>84
AND DIH_DBTNO like ?
AND DIH_DATE >=?
AND DIH_DATE <=?

GROUP BY DIH_DBTNO, JT_DES, DIH_DATE

UNION ALL

SELECT DIH_DBTNO as Debtor, DIL_ITMNO as Item, DIL_DES as Description, DIH_DATE as Date,
SUM(DIL_QTYDEL) AS 'Qty',
SUM(DIL_ORDERTOTAL) AS 'Sales',
SUM(DIL_COST*DIL_QTYDEL) AS 'Cost'

FROM Debtors_Invoice_Header_File, Debtors_Invoice_Line_File
WHERE DIH_LINK = DIL_DIHLINK
AND DIL_TRANTYPE = 73
AND DIH_DBTNO like ?
AND DIH_DATE >=?
AND DIH_DATE <=?

GROUP BY DIH_DBTNO, DIL_ITMNO, DIL_DES, DIH_DATE

Следующий код работает, но он не выводит дату в столбцы.

SELECT DIH_DBTNO as Debtor, JT_DES as Description,

CASE WHEN JT_TYPE=73 THEN JT_ITMNO
WHEN JT_TYPE=76 THEN 'LABOUR'
ELSE 'WORK SHEET' END as Item,

SUM(JT_AQTYHOURS) AS 'Qty',
SUM(JT_ORDERTOTAL) AS 'Sales',
SUM(JT_ACOST*JT_AQTYHOURS) AS 'Cost'


FROM Debtors_Invoice_Header_File, Job_Master_File, Job_Transaction_File
WHERE JOB_NO = DIH_JOBNO
AND JOB_UNIQUE = JT_LINK
AND JT_INVOICED > 0
AND JT_TYPE <>84
AND DIH_DBTNO like ?
AND DIH_DATE >=?
AND DIH_DATE <=?

GROUP BY DIH_DBTNO, JT_DES

UNION ALL

SELECT DIH_DBTNO as Debtor, DIL_ITMNO as Item, DIL_DES as Description,
SUM(DIL_QTYDEL) AS 'Qty',
SUM(DIL_ORDERTOTAL) AS 'Sales',
SUM(DIL_COST*DIL_QTYDEL) AS 'Cost'

FROM Debtors_Invoice_Header_File, Debtors_Invoice_Line_File
WHERE DIH_LINK = DIL_DIHLINK
AND DIL_TRANTYPE = 73
AND DIH_DBTNO like ?
AND DIH_DATE >=?
AND DIH_DATE <=?

GROUP BY DIH_DBTNO, DIL_ITMNO, DIL_DES

Любые указатели на то, где я могу ошибаться, будутоценил, спасибо заранее

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Дата - это третий столбец в первой части и 4-й столбец во второй части. Объединяя все последовательности столбцов и тип данных, должны быть одинаковыми.

Попробуйте и дайте мне знать, если это работает:

SELECT DIH_DBTNO as Debtor, JT_DES as Description, DIH_DATE as Date,

    CASE WHEN JT_TYPE=73 THEN JT_ITMNO
    WHEN JT_TYPE=76 THEN 'LABOUR'
    ELSE 'WORK SHEET' END as Item,

    SUM(JT_AQTYHOURS) AS 'Qty',
    SUM(JT_ORDERTOTAL) AS 'Sales',
    SUM(JT_ACOST*JT_AQTYHOURS) AS 'Cost'


    FROM Debtors_Invoice_Header_File, Job_Master_File, Job_Transaction_File
    WHERE JOB_NO = DIH_JOBNO
    AND JOB_UNIQUE = JT_LINK
    AND JT_INVOICED > 0
    AND JT_TYPE <>84
    AND DIH_DBTNO like ?
    AND DIH_DATE >=?
    AND DIH_DATE <=?

    GROUP BY DIH_DBTNO, JT_DES, DIH_DATE

    UNION ALL

    SELECT DIH_DBTNO as Debtor, DIL_DES as Description, DIH_DATE as Date,
     DIL_ITMNO as Item,
    SUM(DIL_QTYDEL) AS 'Qty',
    SUM(DIL_ORDERTOTAL) AS 'Sales',
    SUM(DIL_COST*DIL_QTYDEL) AS 'Cost'

    FROM Debtors_Invoice_Header_File, Debtors_Invoice_Line_File
    WHERE DIH_LINK = DIL_DIHLINK
    AND DIL_TRANTYPE = 73
    AND DIH_DBTNO like ?
    AND DIH_DATE >=?
    AND DIH_DATE <=?

    GROUP BY DIH_DBTNO, DIL_ITMNO, DIL_DES, DIH_DATE
0 голосов
/ 15 октября 2019

Попробуйте запрос ниже.

SELECT DIH_DBTNO as Debtor, JT_DES as Description, DIH_DATE as Date,

CASE WHEN JT_TYPE=73 THEN JT_ITMNO
WHEN JT_TYPE=76 THEN 'LABOUR'
ELSE 'WORK SHEET' END as Item,

SUM(JT_AQTYHOURS) AS 'Qty',
SUM(JT_ORDERTOTAL) AS 'Sales',
SUM(JT_ACOST*JT_AQTYHOURS) AS 'Cost'


FROM Debtors_Invoice_Header_File, Job_Master_File, Job_Transaction_File
WHERE JOB_NO = DIH_JOBNO
AND JOB_UNIQUE = JT_LINK
AND JT_INVOICED > 0
AND JT_TYPE <>84
AND DIH_DBTNO like ?
AND DIH_DATE >=?
AND DIH_DATE <=?

GROUP BY DIH_DBTNO, JT_DES, DIH_DATE

UNION ALL

SELECT DIH_DBTNO as Debtor, DIL_DES as Description, DIH_DATE as Date, DIL_ITMNO as Item, 
SUM(DIL_QTYDEL) AS 'Qty',
SUM(DIL_ORDERTOTAL) AS 'Sales',
SUM(DIL_COST*DIL_QTYDEL) AS 'Cost'

FROM Debtors_Invoice_Header_File, Debtors_Invoice_Line_File
WHERE DIH_LINK = DIL_DIHLINK
AND DIL_TRANTYPE = 73
AND DIH_DBTNO like ?
AND DIH_DATE >=?
AND DIH_DATE <=?
GROUP BY DIH_DBTNO, DIL_ITMNO, DIL_DES

Я просто изменяю положение столбца item. Основание заключается в том, что в UNION или UNION ALL все соответствующие типы столбцов должны быть одинаковыми и точно не указываться. столбцов должен присутствовать в каждом UNION

Итак, Debtor должен быть с тем же номером столбца в обоих UNION is.e, 1. То же для JT_DES столбец 2 и то же для ITEM колонка 4. Или вы можете изменить порядок, но он должен быть одинаковым в обоих UNION.

Надеюсь, это поможет.

...