ПроблемаИспользование HAVING или WHERE на SUM Поля
У нас есть таблица пользователей и адресов table.Each пользователь может иметь несколько адресов. У нас есть поле бит под названием IsDefault
, где пользователь может выбрать свой адрес по умолчанию. Это поле в настоящее время не является обязательным и, возможно, будет в будущем, поэтому мне нужно сделать некоторый анализ. Теперь я хочу подтвердить адреса, чтобы увидеть:
- Сколько адресов у данного пользователя.
- Сколько из этих адресов (если они имеют более 1 адрес) имеет флаг IsDefault установлен в 1.
В основном я хочу видеть, как многие из моих пользователей, которые имеют несколько адресов, имеют не включили любой из их адресов, которые будут использоваться по умолчанию.
У меня есть следующий запрос SQL до сих пор:
SELECT AD.User_Id,
COUNT(AD.User_Id) AS HowManyAddresses,
SUM(
CASE WHEN
AD.IsDefault IS NULL
OR
AD.IsDefault = 0
THEN
1
ELSE
0
END
) AS DefaultEmpty,
SUM(
CASE WHEN
AD.IsDefault = 1
THEN
1
ELSE
0
END
) AS DefaultAddress
FROM dbo.Addresses AS AD
JOIN dbo.Users AS U
ON U.Id = AD.User_Id
GROUP BY AD.User_ID
ORDER BY AD.User_Id
Проблема, которую я нашел, я хочу, чтобы проверить значение от DefaultAddress
и DefaultEmpty
выбора полого SUM, но я получаю следующее сообщение об ошибке при попытке ссылайтесь на них, используя WHERE или HAVING:
Недопустимое имя столбца 'DefaultEmpty'.
Нельзя ли использовать значения SUM для выбора?
Технология использования:
- SQL Server 2008
- SQL Server Management Studio 2008
Можно использовать значения SUM, но вы не можете ссылаться на псевдонимы столбцов в предложениях where или having, поэтому вам придется повторно набирать совокупность, например. 'ИМЕЕТ СУММУ (СЛУЧАЙ, КОГДА AD.IsDefault IS NULL ИЛИ AD.IsDefault = 0 THEN 1 ELSE 0 END)> 1'. Предложение 'SELECT' находится после предложения' WHERE/HAVING' с [Логическим порядком обработки] (https://msdn.microsoft.com/en-us/library/ms189499.aspx), поэтому, когда оба выполняются эти столбцы псевдонимы еще не определены. – GarethD