Я новичок в SQL, поэтому, вероятно, поэтому возникает проблема с моим запросом, но моя проблема заключается в том, что я запускаю приведенный ниже запрос и получаю много дубликатов на моей таблице.Duplicates in Union
Обе таблицы имеют список предметов с одинаковыми номерами акций, поэтому я присоединяюсь к номеру акций. Проблема в том, что я получаю дублирование в своем списке, тот же номер акций, но у одной строки есть оборот и дни на аренду, а другая - на оставшуюся часть информации из второго выбора минус оборота и дней аренды.
Любая помощь будет оценена!
(SELECT NULL AS 'ITEM_ID',
stock_items.stock_number AS 'STOCK NUMBER',
SUM(stock_assign.turnover) AS 'TURNOVER',
SUM(stock_assign.days_on_hire) AS 'DAYS ON HIRE',
NULL AS ' CAT',
NULL AS 'ITEM NAME',
NULL AS 'DEPOT LOC',
NULL AS 'DISPOSAL DATE',
NULL AS 'DISPOSAL TYPE',
NULL AS 'DATE CREATED',
NULL AS 'CREATED BY',
NULL AS 'COST PRICE'
FROM stock_assign
left join stock_items
ON stock_assign.stock_number = stock_items.stock_number
left join depots
ON depot_id = depots.dpt_id
GROUP BY stock_items.stock_number,
depots.dpt_name)
UNION
(SELECT stock_items.item_id AS 'ITEM_ID',
stock_items.stock_number AS 'STOCK NUMBER',
NULL AS 'TURNOVER',
NULL AS 'DAYS ON HIRE',
stock_items.equipment_class AS ' CAT',
stock_items.name AS 'ITEM NAME',
depots.dpt_name AS 'DEPOT LOC',
stock_items.disposal_date AS 'DISPOSAL DATE',
stock_items.disposal_type AS 'DISPOSAL TYPE',
stock_items.date_available AS 'DATE CREATED',
users.usr_name AS 'CREATED BY',
fixed_assets.cost_amount AS 'COST PRICE'
FROM stock_items
left join users
ON users.usr_id = stock_items.userid_created
left join depots
ON stock_items.depot_id_located_at = depots.dpt_id
left join fixed_assets
ON stock_items.item_id = fixed_assets.stock_item_id)
ORDER BY 'STOCK NUMBER' ASC
Спасибо за вашу помощь - это похоже на то, что мне нужно, но у меня возникли проблемы с получением его узнайте поля в cte_Item, он, похоже, не распознает ссылку CTE, хотя это относится к назначениям. Я пробовал, cte_Item и, cte_Item AS, я использую SQL Server 2012 Express, если это имеет какое-либо отношение к нему? Стоит отметить, что мне пришлось добавить AS в первый оператор WITH cte_Assignemnt AS – Andy00001
Я обновил отсутствующие записи 'AS'. Я смотрю, но пока не вижу еще одной проблемы. ** Исправление **, найдено два опечатка и исправлено. –
ok cool - я все еще получаю недопустимое имя объекта 'cte.Item', может быть, просто что-то с синтаксисом где-то, хотя я искал, как использовать CTE, и это кажется правильным – Andy00001