Выберите с помощью CASE и Union [TSQL] - PullRequest
0 голосов
/ 30 июня 2018

У меня есть таблица платежей. Я хотел бы выбрать несколько столбцов на основе номера квитанции. Затем я хотел бы отобразить столбец условного статуса в зависимости от нескольких значений.

Я написал оператор SQL, который отлично работает, просто для этого:

КОД

SELECT 
    [Number], [Name], [Amount],
    CASE 
       WHEN [Downloaded by] IS NULL 
            AND [Request Accepted?] IS NULL 
          THEN 'Sent to Payments'
       WHEN [Downloaded by] IS NOT NULL 
            AND [Request Accepted?] IS NULL
          THEN 'Received by Payments'
       WHEN [Downloaded by] IS NOT NULL
            AND [Request Accepted?] IS NOT NULL 
           THEN 'Sent to Finance'
    END AS 'Real-time Status' 
FROM
    [DB] 
WHERE
    [Request Receipt Id] = 'PR0001' 

Я создаю форму, где пользователи смогут прокручивать эти значения, и я хотел бы отобразить другой столбец, который находится в базе данных. Однако я не хочу показывать этот столбец в главном окне поиска. Поэтому я настроил поле поиска так, чтобы оно содержало только 4 столбца (Число, Имя, Сумма и Статус в реальном времени).

Идея в том, что если у меня есть 5-й столбец, он не будет отображаться в основной пользовательской форме, если они не нажмут на него, и он не появится в другом окне.

Моя проблема заключается в настройке этого оператора SQL для организации данных так, как я хочу:

[Number], [Name], [Amount], [Real-time Status], [Description]

Код, который я использовал для этого:

SELECT 
    [Number], [Name], [Amount],
    CASE 
       WHEN [Downloaded by] IS NULL 
            AND [Request Accepted?] IS NULL 
          THEN 'Sent to Payments'
       WHEN [Downloaded by] IS NOT NULL 
            AND [Request Accepted?] IS NULL
          THEN 'Received by Payments'
       WHEN [Downloaded by] IS NOT NULL
            AND [Request Accepted?] IS NOT NULL 
           THEN 'Sent to Finance'
    END AS 'Real-time Status' 
FROM
    TEP_Payments_Table 
WHERE 
    [Request Receipt Id] = 'PR0001' 

UNION 

SELECT 
    [Description] 
WHERE 
    [Request Receipt Id] = 'PR0001'

Однако, когда я пытаюсь это сделать, SQL Server не нравится и выдает ошибки.

Не могли бы вы, ребята, посоветовать, где я иду не так и каков наиболее эффективный способ добиться того, чего я хочу.

Спасибо

1 Ответ

0 голосов
/ 30 июня 2018

Если все данные взяты из одной таблицы, вам просто нужно добавить поле описания к вашему запросу.

        SELECT [Number],[Name],[Amount],
        CASE WHEN [Downloaded by] is null and [Request Accepted?] is null then 'Sent to Payments'
        WHEN [Downloaded by] is not null and [Request Accepted?] is null then 'Received by Payments'
        When [Downloaded by] is not null and [Request Accepted?] is not null then 'Sent to Finance'
        END as 'Real-time Status',
        Description
     from TEP_Payments_Table where [Request Receipt Id] = 'PR0001' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...