«Не группа по выражению» Oracle SQL Statement - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь запустить приведенный ниже код, но получаю ошибку Not a Group by Expression.Я провел некоторое исследование и обнаружил, что мне нужно добавить «Группировать по», что я и сделал, но я не уверен, что делаю неправильно?

Конечный результат Я ищу список medicaid_no и 1 в test_flag, если они имеют число more > 0 и In_Op равно inpatient.

Если вы видите ниже строки 1,2, и 4 соответствуют критериям count > 0 и имеют Inpatient, в то время как другие не соответствуют, то они получают 0.

Row MEDICAID_NO TEST_FLAG
1   999999         1
2   1111111        1
3   3333333        0
4   444444         1
5   88888888       0

Вот мой код

SELECT medicaid_no, count(*)
,(CASE WHEN count(*)>0 and In_Op IN('Inpatient')
THEN 1 ELSE 0 END) AS test_FLAG
FROM top_member_claims 
GROUP BY medicaid_no

1 Ответ

0 голосов
/ 15 мая 2018

Кажется, есть столбец с именем In_Op в таблице top_member_claims, и он должен быть в

выражении Group By как Group By medicaid_no, In_Op.

Итак, используйте:

CREATE TABLE top_member_claims
(
  row_   int,
  MEDICAID_NO    int,
  TEST_FLAG int,
  In_Op varchar2(50)
);

INSERT INTO top_member_claims VALUES (1, 999999, 1, 'Inpatient');

SELECT medicaid_no, count(*),
      (CASE WHEN count(*)>0 and In_Op IN('Inpatient')
            THEN 1 
            ELSE 0 
       END) AS test_FLAG
 FROM top_member_claims 
GROUP BY medicaid_no, In_Op;

MEDICAID_NO COUNT(*)    TEST_FLAG
  999999       1            1
  3333333      1            1
  1111111      1            0
  444444       1            0
  88888888     1            1

Но не использовать

SELECT medicaid_no, count(*),
      (CASE WHEN count(*)>0 and In_Op IN('Inpatient')
            THEN 1 
            ELSE 0 
       END) AS test_FLAG
 FROM top_member_claims 
GROUP BY medicaid_no; -- yields below

ORA-00979: not a GROUP BY expression

Демонстрация SQL Fiddle

...