Ошибка хранимой процедуры SQL в ошибке списка выбора - PullRequest
0 голосов
/ 08 декабря 2011

Я конвертирую из MySQL на сервер SQL.

При преобразовании выбранного сохраненного процесса

CREATE PROCEDURE selPropertyByAcntID
(
@in_acntID INT
)
AS
SELECT *
     , SUM(CASE
                        WHEN u.prop_id IS NOT NULL THEN 1
                        ELSE 0
                 END) AS UnitCount
FROM 
    prop_details d
INNER JOIN 
    acnt_property a
ON 
    d.prop_id = a.prop_id
LEFT JOIN 
    unit_details u
ON 
    d.prop_id = u.prop_id
WHERE 
    a.group_id = @in_acntID
GROUP BY 
    d.prop_id;

Выдает следующую ошибку:

Ошибка: 8120 Серьезность 16 Столбец prop_details.prop_title недопустим всписок выбора, потому что он не является контейнером ни в статистической функции, ни в предложении GROUP BY.

странно - точно такой же хранимый процесс работает в среде mysql.

Любая помощь в этом оченьоценили.

Ответы [ 4 ]

3 голосов
/ 08 декабря 2011

В SQL Server и почти во всех СУБД , за исключением MySQL, вы можете включать в список SELECT только те элементы, которые включены в список GROUP BY или те, которые объединены в совокупность.

Таким образом, чтобы решить проблему, избавьтесь от *, выберите только нужные вам столбцы из таблиц d и a и добавьте этот список также в GROUP BY

1 голос
/ 08 декабря 2011

Просто заметка, не связанная с вашим вопросом. Эта часть:

 , SUM(CASE
              WHEN u.prop_id IS NOT NULL THEN 1
              ELSE 0
       END) AS UnitCount

можно упростить до:

 , COUNT(u.prop_id) AS UnitCount
0 голосов
/ 08 декабря 2011

В выбранном вами случае у вас есть *, но только группировка по prop_id.Если вы измените * на d.prop_id, вы должны быть хорошими.Если вам нужны какие-либо другие столбцы, укажите их в списке выбора и сгруппируйте по.

0 голосов
/ 08 декабря 2011

С SQL Server (я думал, что большинство СУБД на самом деле ...) операторы с GROUP BY могут включать в себя только столбцы группировки и функции агрегирования.Например, это будет работать:

SELECT ColumnA, SUM(ColumnB) TotalCount
FROM Table
GROUP BY ColumnA;

Но это не будет:

SELECT ColumnA, ColumnC, ColumnD, SUM(ColumnB) TotalCount
FROM Table
GROUP BY ColumnA;

Поскольку ColumnC и ColumnD не группируются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...