Изменение имени элемента в отдельном столбце в запросе для облегчения группировки - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь рассчитать полный инвентарь для определенных продавцов.Однако у меня проблема с объединением информации на основе двух отдельных столбцов.Для каждого перечисленного товара есть столбец «продавец» и столбец «inferred_seller», в котором может быть указана оригинальная компания продукта (подумайте, продавались ли продукты Kirkland от Costco на рынках Tesco в Англии).Я хочу рассчитать полные позиции в целом для основных клиентов.

Sample Data:

ID    seller      item     inferred_seller
1     Store_A     Chips     Store_A
2     Store_B     Donuts    NULL
3     Store_C     Crackers  NULL
4     Store_D     Chicken   Store_B
5     Store_D     Soup      Store_C
6     Store_E     Apple     Store_C
7     Store_E     Plum      Store_B
8     Store_E     Bread     Store_A

То, что я уже пробовал, это случай, когда в сценарии для Alias ​​продавец указывает в качестве inferred_seller, чтобы я мог добавить их вместе.

SELECT CASE WHEN seller IN ('Store_A','Store_B','Store_C') THEN 
seller WHEN inferred_seller IN ('Store_A','Store_B','Store_C') THEN 
inferred_seller = seller END AS seller's, count(id)
FROM items
WHERE seller IN ('Store_A','Store_B','Store_C') OR 
inferred_seller IN ('Store_A','Store_B','Store_C')
GROUP BY 1

В настоящее время это просто выплевывает только информацию из столбца продавца, в то время как выведенная часть помещается в группу NULL или 0.То, что я хочу показать, это Магазин A, созданный продавцом + inferred_seller (если он уже не находится под продавцом).

В идеале, результаты просто покажут что-то вроде этого:

Sellers   count(id)
Store_A     2
Store_B     3
Store_C     3

Любая помощь приветствуется, спасибо.

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Мне кажется, вам просто нужно что-то вроде:

CASE 
   WHEN seller NOT IN ('Store_A','Store_B','Store_C') THEN inferred_seller 
   ELSE seller 
END AS seller
....
WHERE seller IN ('Store_A','Store_B','Store_C') 
   OR inferred_seller IN ('Store_A','Store_B','Store_C')
0 голосов
/ 07 февраля 2019

Говорите коллеге, ответ таков: мне нужно было подключить COALESCE (inferred_seller, seller) в оператор SELECT и оператор WHERE, чтобы получить то, что я хотел.Спасибо всем за помощь!

0 голосов
/ 07 февраля 2019

Вы можете использовать UNION для возврата набора данных с обоими полями, объединенными в один столбец:

SELECT
    Seller, 
    COUNT(id)
FROM (
    SELECT
        Id,
        Seller
    FROM items
    WHERE Seller IN ('Store_A','Store_B','Store_C')

    UNION ALL

    SELECT
        Id,
        Inferred_Seller
    FROM items
    WHERE Inferred_Seller IN ('Store_A','Store_B','Store_C')
    )    
GROUP BY Seller
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...