Я создал следующий вид в SQL Server 2008 для создания списков рассылки для владельцев земельных:SQL Server 2008 View Group By
SELECT
dbo.parcel.featid,
CAST(mms_db.dbo.TR_Roll_Master.FMT_ROLL_NO AS decimal(11, 3)) AS Roll,
dbo.parcel.survey, mms_db.dbo.Central_Name_Database.NAME AS Owner,
mms_db.dbo.Central_Name_Database.NAME_2 AS Owner2,
mms_db.dbo.Central_Name_Database.BOX_NUM,
mms_db.dbo.Central_Name_Database.APT_NUM,
mms_db.dbo.Central_Name_Database.FMT_STREET AS House_num,
mms_db.dbo.Central_Name_Database.CITY AS Town,
mms_db.dbo.Central_Name_Database.PROV_CD AS Prov,
mms_db.dbo.Central_Name_Database.POST_CD AS Post_code,
mms_db.dbo.TR_Roll_Number_Owners.NAME_CODE
FROM
mms_db.dbo.TR_Roll_Master
INNER JOIN
dbo.parcel ON mms_db.dbo.TR_Roll_Master.ROLL_NO = dbo.parcel.roll_no COLLATE SQL_Latin1_General_CP1_CI_AS
INNER JOIN
mms_db.dbo.TR_Roll_Number_Owners ON mms_db.dbo.TR_Roll_Master.ROLL_NO = mms_db.dbo.TR_Roll_Number_Owners.ROLL_NO
INNER JOIN
mms_db.dbo.Central_Name_Database ON mms_db.dbo.TR_Roll_Number_Owners.NAME_CODE = mms_db.dbo.Central_Name_Database.NAME_CODE
WHERE
(mms_db.dbo.TR_Roll_Master.DEL_ROLL NOT LIKE '%Y%') AND
(mms_db.dbo.TR_Roll_Master.ROLL_NO NOT LIKE 'P%') OR
(mms_db.dbo.TR_Roll_Master.DEL_ROLL IS NULL) AND (mms_db.dbo.TR_Roll_Master.ROLL_NO NOT LIKE 'P%') OR
(mms_db.dbo.TR_Roll_Master.DEL_ROLL NOT LIKE '%I%') AND
(mms_db.dbo.TR_Roll_Master.ROLL_NO NOT LIKE 'P%')
Вид отлично работает, однако там часто дублирует как много людей собственного более чем один участок земли. Я хотел бы сгруппировать по Name_Code
, чтобы устранить дубликаты.
Когда я добавляю:
Group by mms_db.dbo.TR_Roll_Number_Owners.NAME_CODE
в конце запроса я вернулся со следующим ответом:
SQL Execution Error.
Выполненная SQL заявление: SELECT dbo.parcel.featid, CAST (mms_db.dbo.TR_Roll_Master.FMT_ROLL_NO AS десятичной (11,3)) AS Ролл, dbo.parcel.survey, mms_db.dbo.Central_NameDatabase.Name Сообщение об ошибке .Net SQLClient поставщика данных: AS Владелец, mms_db.dbo.Central_Name_Database.NAME_2 AS Owner2, mms_db.dbo.Central_Name_Database.B ... Ошибка Источник Column 'dbo.parcel.featid' является недействительным в выберите список , потому что он не содержится ни в агрегатной функции, ни в
Предложение GROUP BY.
Я не уверен, что мне нужно изменить, чтобы сделать эту работу.
--Edit--
В качестве образца данных, вот сгущенное пример того, что я хотел бы достичь
Roll Owner Box_Num Town Prov Post_code Name_Code
100 John Smith 50 Somewhere MB R3W 9T7 00478
200 John Smith 50 Somewhere MB R3W 9T7 00478
300 Peter Smith 72 Somewhere MB R3W 9T9 00592
400 John Smith 90 OtherPlace MB R2R 8V7 00682
Джон Смит имеет кодовое название 00478. Он владеет как Ролл 100 & 200, Питер Смит владеет 300, а другой человек с именем Джона Смита владеет 400. Основываясь на разных значениях Name_Code, я знаю, что два Джона Смита - разные люди. Я бы хотел, чтобы вывести список с Джоном Смитом с Name_Code 00478 1 раз, пока также перечислял Питер Смит и другой Джон Смит. Name_Code
- единственное значение, которое я могу использовать для группировки, поскольку остальные могут представлять разных людей с тем же именем.
Для предложения GROUP BY необходимо добавить элементы в том порядке, в котором вы хотите их группировать, пока не достигнете конца группировки, попробуйте добавить 'dbo.parcel.featid' в 'GROUP BY' чем-то вроде' GROUP BY mms_db.dbo.TR_Roll_Number_Owners.NAME_CODE, dbo.parcel.featid' –
Можете ли вы показать некоторые примеры данных, объясняя, какую строку вы хотите сохранить и почему? –
См. Http://stackoverflow.com/questions/13999817/reason-for-column-is-invalid-in-the-select-list-because-it-is-not-contained-in-e –