Используйте count () в CASE Expression - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть следующие данные, и мне нужна помощь в создании выражения для случая с условием: если для идентификатора платежа существует более одного PPaymentID, тогда M равно Y, иначе false.

PaymentID   ProductID  PPaymentID
1456789     1398        4587934
3445738     1398        8754418 
3445738     1399        8754419 

Я бы хотел что-то увидеть как

  PaymentID   ProductID  PPaymentID     M
    1456789     1398        4587934     N
    3445738     1398        8754418     Y
    3445738     1399        8754419     Y

Ответы [ 2 ]

3 голосов
/ 07 апреля 2020

Вы можете использовать

SELECT *, CASE WHEN COUNT(1) OVER(PARTITION BY PaymentID) >= 2 THEN 'Y' ELSE 'N' END AS M
FROM YourTable
1 голос
/ 07 апреля 2020

Поскольку вас волнует только, есть ли другая строка с таким же PaymentId и другим PPaymentId, нет необходимости получать точное значение count. Более эффективно просто проверить, есть ли такая строка exists:

select PaymentId, ProductId, PPaymentId,
  case when exists ( select 42 from YourTableOData as iYTOD
    where iYTOD.PaymentId = YTOD.PaymentId and iYTOD.PPaymentId != YTOD.PPaymentId )
    then 'Y'
    else 'N' end as M
  from YourTableOData as YTOD;
...