выбор определенных карт с помощью двойного вложенного SQL-запроса sybase

#sql #group-by #nested #sybase

#sql #группировать по #вложенный #sybase

Вопрос:

 SELECT card_num, 
       COUNT(merchant_code) 
from e_transaction 
where trans_date between '20161017 00:00' and '20161017 23:59' 
and channelid='02' 
and trans_code='P' 
and card_num in (select card_num, 
                        sum(trans_amount) 
                 from e_transaction 
                 where trans_date between '20161017 00:00' and '20161017 23:59' 
                 and channelid='02' 
                 and trans_code='T' 
                 and card_num not in (select card_num 
                                      from e_transaction 
                                      where trans_date between '20160724 00:00' and '20161016 23:59') 
                 group by card_num 
                 having sum(trans_amount) > 100000) 
group by card_num 
having count (merchant_code) > 1
  

Я продолжаю получать синтаксическую ошибку для этого запроса, но, похоже, не могу найти, где ошибка. Я пытаюсь объединить несколько card_num с тем же кодом merchant_code на сегодняшний день с trans_amount, превышающим 100000, и не найден между 20160724 и вчера

сообщения об ошибках

[Неправильный синтаксис рядом с ‘,’] [Неправильный синтаксис рядом с ключевым словом ‘group’]

Ответ №1:

После правильного форматирования запроса легко увидеть проблему. В вашем первом вложенном выборе вы написали:

 and card_num in (select card_num, 
                        sum(trans_amount) 
                 from e_transaction 
                 ...)
  

Ожидается in , что будет один столбец, но ваш вложенный выбор выдает два. Все, что вам нужно сделать, это удалить sum(trans_amount) из вложенного выбора следующим образом:

 and card_num in (select card_num
                 from e_transaction 
                 ...)
  

Комментарии:

1. Спасибо, Гилад. Теперь он работает нормально

2. @brucewayne — Отлично, рад слышать