1

UNION を使用して 2 つのテーブルからデータを取得するクエリがありますが、正しく表示されますが、これらの日付の間のデータを表示するために異なる日付間隔を選択する必要がある場合に問題が発生します。クエリ全体ではなく、その単一の SELECT 部分に対して。全体に適用する必要があります...どのように?

SELECT
    TICKETS.TICKETID AS TICKET_NO,
    RECEIPTS.DATENEW AS DATENEW,
    PAYMENTS.TOTAL AS MONEY,
    CUSTOMERS.NAME AS CUSTOMER,
    PAYMENTS.PAYMENT AS PAYMENT
FROM RECEIPTS
    LEFT JOIN TICKETS ON RECEIPTS.ID = TICKETS.ID
    LEFT JOIN PAYMENTS ON RECEIPTS.ID = PAYMENTS.RECEIPT
    LEFT JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID
WHERE ?(QBF_FILTER)
UNION SELECT
    ADJUSTMENTS.TICKET_NO AS TICKET_NO,
    ADJUSTMENTS.DATE AS DATENEW,
    ADJUSTMENTS.ADJUSTMENT_AMOUNT AS MONEY,
    ADJUSTMENTS.CUSTOMER_NAME AS CUSTOMER,
    ADJUSTMENTS.ADJUSTMENT_TYPE AS PAYMENT
FROM ADJUSTMENTS
    LEFT JOIN CUSTOMERS ON CUSTOMERS.ID = ADJUSTMENTS.CUSTOMER_ID
    WHERE ?(QBF_FILTER)

>>>>上記のクエリは、レポートの生成に .bs ファイルを使用する UNICENTA オープン ソース コード プロジェクトから取得したものです。両方の選択部分に WHERE 句を配置すると、SQL 構文エラーが発生します。解決、ありがとう :|

4

1 に答える 1

5

ネストされた Select を使用してこれを実現できます。

SELECT * FROM (
    SELECT
        TICKETS.TICKETID AS TICKET_NO,
        RECEIPTS.DATENEW AS DATENEW,
        PAYMENTS.TOTAL AS MONEY,
        CUSTOMERS.NAME AS CUSTOMER,
        PAYMENTS.PAYMENT AS PAYMENT
    FROM RECEIPTS
        LEFT JOIN TICKETS ON RECEIPTS.ID = TICKETS.ID
        LEFT JOIN PAYMENTS ON RECEIPTS.ID = PAYMENTS.RECEIPT
        LEFT JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID
    WHERE ?(QBF_FILTER)
    UNION SELECT
        ADJUSTMENTS.TICKET_NO AS TICKET_NO,
        ADJUSTMENTS.DATE AS DATENEW,
        ADJUSTMENTS.ADJUSTMENT_AMOUNT AS MONEY,
        ADJUSTMENTS.CUSTOMER_NAME AS CUSTOMER,
        ADJUSTMENTS.ADJUSTMENT_TYPE AS PAYMENT
    FROM ADJUSTMENTS
        LEFT JOIN CUSTOMERS ON CUSTOMERS.ID = ADJUSTMENTS.CUSTOMER_ID
        WHERE ?(QBF_FILTER)
    )
WHERE (yourDate between Date1 and Date2)

編集:もっと似ている必要があると思います:

SELECT * FROM (
    SELECT
        TICKETS.TICKETID AS TICKET_NO_REC,
        RECEIPTS.DATENEW AS DATENEW_REC,
        PAYMENTS.TOTAL AS MONEY_REC,
        CUSTOMERS.NAME AS CUSTOMER_REC,
        PAYMENTS.PAYMENT AS PAYMENT_REC
    FROM RECEIPTS
        LEFT JOIN TICKETS ON RECEIPTS.ID = TICKETS.ID
        LEFT JOIN PAYMENTS ON RECEIPTS.ID = PAYMENTS.RECEIPT
        LEFT JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID
    UNION SELECT
        ADJUSTMENTS.TICKET_NO AS TICKET_NO_ADJ,
        ADJUSTMENTS.DATE AS DATENEW_ADJ,
        ADJUSTMENTS.ADJUSTMENT_AMOUNT AS MONEY_ADJ,
        ADJUSTMENTS.CUSTOMER_NAME AS CUSTOMER_ADJ,
        ADJUSTMENTS.ADJUSTMENT_TYPE AS PAYMENT_ADJ
    FROM ADJUSTMENTS
        LEFT JOIN CUSTOMERS ON CUSTOMERS.ID = ADJUSTMENTS.CUSTOMER_ID
    )
WHERE ?(QBF_FILTER)
于 2013-05-29T15:35:18.407 に答える