Расстановка дел на основе подсчета - PullRequest
1 голос
/ 03 мая 2011

Я хочу сделать регистр, основанный на результатах подсчета.

Что-то вроде:

SELECT
    CASE
        WHEN count(distinct column) = 1
            THEN Foo
        WHEN count(distinct column) = 2
            THEN foo2
    END,
    column2
FROM
    TABLE

Выше выдает такие ошибки, как:

Column 'column2' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.

Я пробовал несколько других вариантов, подобных этой, но безрезультатно.

Использование MS SQL 2005.

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Вы должны GROUP BY колонка 2:

SELECT
    CASE
        WHEN count(distinct column) = 1
            THEN Foo
        WHEN count(distinct column) = 2
            THEN foo2
    END,
    column2
FROM
    TABLE
GROUP BY Column2
0 голосов
/ 04 мая 2011

Получил, что это решено вчера.Мне удалось выполнить то, что мне было нужно, дважды объединив таблицу с разными псевдонимами и применив для каждого разные условия соединения.Это позволило мне избежать необходимости подсчета, потому что у меня были таблицы специального назначения, которые имели только правильные значения.

Извините за абстрактный код, но результат был похож на:

SELECT
    CASE
        WHEN table1.field IS NOT NULL
            THEN table1alias1.column1
        WHEN table2.field IS NOT NULL
            THEN table1alias2.column1
    END,
    column2
FROM
    TABLE0
    LEFT OUTER JOIN TABLE1 on TABLE0.id = TABLE1.field AND
        TABLE1.column1 LIKE '%foo%' as TABLE1ALIAS1
    LEFT OUTER JOIN TABL1 on TABLE0.id = TABLE1.field AND
        TABLE1.column1 LIKE '%fork%' as TABLE1ALIAS2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...