VB. Net SQL Запрос - я пытаюсь объединить два столбца, но у меня возникают проблемы - PullRequest
0 голосов
/ 01 августа 2020

Ниже приводится запрос, который я пытаюсь выполнить. Я получаю сообщение об ошибке

ClassItem не является именем столбца.

Пожалуйста, дайте мне знать, где я ошибаюсь в этом запросе.

SELECT 
    *, CONCAT([Cabin], [Item]) AS ClassItem 
FROM 
    FQR_RAW_1 AS ClassItem 
WHERE 
    ClassItem IN ('%JCHML - Child Meal%', '%WCHML - Child Meal%', '%YMC - Beef%', '%YMC - Chicken%', '%YMC - Fish / Shellfish%', '%YMC - Pork%', '%YMC - Regional Taste (Non Veg)%', '%YMC - Regional Taste (Veg)%', '%YMC - Vegetarian%')  
    AND [Origin Region] LIKE 'USA%'

Ответы [ 2 ]

0 голосов
/ 01 августа 2020

Вы не можете повторно использовать столбец, определенный в предложении select в предложении where - здесь это ClassItem.

Другая проблема заключается в том, что вы не можете использовать IN с подстановочным знаком %, что, кажется, и есть ваше намерение здесь. Вместо этого вы можете искать серию условий OR:

SELECT *, CONCAT([Cabin], [Item]) as ClassItem 
FROM FQR_RAW_1  
WHERE 
    (
           CONCAT([Cabin], [Item]) LIKE '%JCHML - Child Meal%'
        OR CONCAT([Cabin], [Item]) LIKE '%WCHML - Child Meal%'
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Beef%'
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Chicken%'
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Fish / Shellfish%'
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Pork%', 
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Regional Taste (Non Veg)%'
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Regional Taste (Veg)%'
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Vegetarian%'
    ) 
    AND [Origin Region] LIKE 'USA%'

Обратите внимание, что я также удалил псевдоним таблицы, который на самом деле не нужен в запросе и был идентичен псевдониму столбца - хотя SQL поддерживает это, это немного сбивает с толку. Если вам по какой-то причине нужно создать псевдоним для таблицы, используйте другой псевдоним.

0 голосов
/ 01 августа 2020

Вы не можете повторно использовать псевдоним в том же запросе. Одно из простых решений - использовать подзапрос:

SELECT r.*
FROM (SELECT r.*, CONCAT([Cabin],[Item]) as ClassItem
      FROM FQR_RAW_1 AS r
     ) r
WHERE ClassItem IN ('%JCHML - Child Meal%', '%WCHML - Child Meal%', '%YMC - Beef%', '%YMC - Chicken%', '%YMC - Fish / Shellfish%', '%YMC - Pork%', '%YMC - Regional Taste (Non Veg)%', '%YMC - Regional Taste (Veg)%', '%YMC - Vegetarian%') AND
      [Origin Region] LIKE 'USA%'
...