mousau Ответов: 2

Включает в себя пользовательские столбцы в предложении метода groupBy является неправильным ?


Всем Привет
Пожалуйста, помогите мне немного прояснить положение Group By.Я попытался использовать дополнительный (определяемый пользователем col) в моем предложении Group By, который не присутствует в качестве исходного столбца в группе by, однако он снова заканчивается ошибкой: (!!

Что я уже пробовал:

запрос:
select CustName,Count(CustName),PurchaseDate,DATENAME(dw,PurchaseDate) as Day from [CustmrSrc] where Day = 'Monday' and Day ='Tuesday' and  Day='Wednesday' and Day='Thursday'and Day='Friday' Group By CustName, PurchaseDate ,Day


Ошибка:-
Msg 207, Level 16, State 1, Line 1
Invalid column name 'Day'.
Msg 207, Level 16, State 1, Line 1
Invalid column name 'Day'.
Msg 207, Level 16, State 1, Line 1
Invalid column name 'Day'.
Msg 207, Level 16, State 1, Line 1
Invalid column name 'Day'.
Msg 207, Level 16, State 1, Line 1
Invalid column name 'Day'.
Msg 207, Level 16, State 1, Line 1
Invalid column name 'Day'.


С уважением

2 Ответов

Рейтинг:
15

phil.o

Вы можете включить определяемый пользователем столбец В предложения WHERE и GROUP BY, но вместо имени вы должны использовать полное объявление.
Применительно к вашему примеру это дало бы:

SELECT
  CustName
 ,Count(CustName)
 ,PurchaseDate
 ,DATENAME(dw,PurchaseDate) as Day
FROM
 [CustmrSrc]
WHERE
    DATENAME(dw,PurchaseDate) = 'Monday'
 OR DATENAME(dw,PurchaseDate) = 'Tuesday'
 OR DATENAME(dw,PurchaseDate) = 'Wednesday'
 OR DATENAME(dw,PurchaseDate) = 'Thursday'
 OR DATENAME(dw,PurchaseDate) = 'Friday'
GROUP BY
  CustName
 ,PurchaseDate

Несколько заметок:
- Здесь нужны или условия, не А. Данная дата не может быть понедельником и вторником одновременно.
- Поскольку вы уже включили столбец PurchaseDate в предложение GROUP BY, вам не нужно также включать название дня (PurchaseDate уже определяет день недели).

Любезно.


mousau

Привет Фил
Большое спасибо за ответ и обеспечение ясности.
Теперь у меня есть вопрос! Попробовал тот же запрос, используя предложение "IN", но мне действительно нужно получить подробную информацию о тех клиентах, которые регулярно совершают покупки в любой из пяти дней, но я борюсь здесь:(

Спасибо
С уважением

Рейтинг:
0

Anisuzzaman Sumon

Вы передаете выражение, по которому хотите сгруппироваться, а не псевдоним
Как показано ниже

select CustName,Count(CustName),PurchaseDate,DATENAME(dw,PurchaseDate) as Day from [CustmrSrc] A

where DATENAME(dw,PurchaseDate) = 'Monday' or DATENAME(dw,PurchaseDate) ='Tuesday' or  DATENAME(dw,PurchaseDate)='Wednesday' or DATENAME(dw,PurchaseDate)='Thursday'or DATENAME(dw,PurchaseDate)='Friday'

Group By CustName, PurchaseDate ,DATENAME(dw,PurchaseDate)


mousau

Привет Сумон
Большое спасибо за ответ.
С уважением