Abhilash.J.A Ответов: 1

Как я могу поставить один флаг, если у одного и того же клиента есть другой аккаунт ?


Позвольте мне объяснить, в чем заключается мое требование. Мне нужно проверить есть ли у меня клиенты с другим productid если да то я должен проверить есть ли у них какой либо producttype null или нет в случае если какой либо из customerid имеет NULL producttype то флаг для обоих customerid должен быть N else Y

Например: у меня есть таблица, в которой у меня много столбцов. PFB структура таблицы

Customerid    productid     producttype
  1               a             x
  1               b            Null
  2               c             y
  2               d             y
  3               e             z
  3               f            Null


то, что я хочу, как показано ниже:

Customerid  Productid   Productype   flag
  1            a            x         N
  1            b           Null       N
  2            c            y         Y                       
  2            d            y         Y
  3            e            z         N
  3            f           Null       N


Что я уже пробовал:

До сих пор то, что я сделал,

(
select * from test where customerid  in
(select  customerid  from test  group by customerid having count(*) >1
) )


из этого я собираю все customerid, у которых есть более одного productid и другой producttpe, теперь я хочу добавить часть флага.

Пожалуйста, помогите мне...

Richard Deeming

А что, если у них есть только один продукт? На что в таком случае должен быть установлен флаг?

Abhilash.J.A

Это должно быть "Y", если есть только один продукт для customerid и тип продукта не равен null.

1 Ответов

Рейтинг:
11

Richard Deeming

Что-то вроде этого должно сработать:

WITH cte As
(
    SELECT
        CustomerId,
        Count(1) As Num,
        Max(CASE WHEN ProductType Is Null THEN 1 ELSE 0 END) As AnyNulls
    FROM
        Test
    GROUP BY
        CustomerId
)
SELECT
    T.CustomerId,
    T.ProductId,
    T.ProductType,
    CASE
        WHEN S.AnyNulls = 0 THEN 'Y'
        WHEN S.Num > 1 THEN 'N'
        ELSE Null
    END As Flag
FROM
    Test As T
    INNER JOIN cte As S
    ON S.CustomerId = T.CustomerId
;

Флаг будет Y если ни один из типов продуктов для клиента не является Null; N если существует более одного продукта и по крайней мере один тип продукта Null; и Null если есть только один продукт, и тип продукта Null.

Если вам нужно изменить это, вы должны быть в состоянии изменить второе CASE заявление.