Я создаю представление, используя этот запрос. Этот запрос работает, однако он приводит к появлению 2 строк для каждого из значений, возвращаемых из каждой объединенной таблицы. Как я могу получить 1 строку?Уникальный идентификатор подзапроса SQL Union - возвращает двойные результаты
ROW_NUMBER() OVER (ORDER BY A.ID) AS ID
часть потому, что мне нужен уникальный идентификатор. (Есть ли лучший способ сделать это?)
SELECT Row_number()
OVER (
ORDER BY A.ID) AS ID,
ALIAS_CKT_ID,
peg_site_id,
circuit_id,
LOC_A_ADDRESS,
CKT_ORDER,
CKT_STATUS,
PROD_DESCRIPTION,
customer_code,
CUSTOMER_ID,
CUSTOMER_NAME,
CKT_LOCATION_Z,
network,
market,
Source
FROM (SELECT circ.id,
NULL AS 'ALIAS_CKT_ID',
peg_site_id,
circuit_id AS 'CIRCUIT_ID',
NULL AS 'LOC_A_ADDRESS',
NULL AS 'CKT_ORDER',
NULL AS 'CKT_STATUS',
NULL AS 'PROD_DESCRIPTION',
circ.customer_code,
NULL AS 'CUSTOMER_ID',
cust.company AS 'CUSTOMER_NAME',
NULL AS 'CKT_LOCATION_Z',
network,
Cast(circ.market AS VARCHAR(max)) AS market,
'PEG' AS 'Source'
FROM dbo.peg_circuit_network_data circ
LEFT JOIN dbo.peg_customers cust
ON cust.customer_code = circ.customer_code
UNION ALL
SELECT cv.id,
ALIAS_CKT_ID,
CKT_LOCATION_Z AS 'peg_site_id',
CIRCUIT_ID,
LOC_A_ADDRESS,
CKT_ORDER,
CKT_STATUS,
PROD_DESCRIPTION,
cv.CUSTOMER_CODE AS customer_code,
CUSTOMER_ID,
cust.company AS 'CUSTOMER_NAME',
CKT_LOCATION_A,
NULL AS 'network',
NULL AS 'market',
FROM dbo.tc_cv_circuit_network cv
LEFT JOIN dbo.peg_customers cust
ON cust.customer_code = cv.customer_code
UNION ALL
SELECT NULL AS 'id',
NULL AS 'ALIAS_CKT_ID',
a_peg_site_id AS 'peg_site_id',
peg_circuit_id AS 'CIRCUIT_ID',
a_address AS 'LOC_A_ADDRESS',
NULL AS 'CKT_ORDER',
order_status AS 'CKT_STATUS',
product_type AS 'PROD_DESCRIPTION',
customer_code AS customer_code,
NULL AS CUSTOMER_ID,
customer_short AS 'CUSTOMER_NAME',
NULL AS CKT_LOCATION_A,
NULL AS 'network',
Cast(market AS VARCHAR(max)) AS market,
FROM Openquery(crltoolsp01,
LEFT JOIN crm ON cpm.customer_short=crm.company
WHERE cpm.product_type="Dark Fiber";')) A
Возможно, проблема в LEFT JOIN. Объединение ведет себя как взаимное умножение. –
Добавьте тег для программы менеджера баз данных (MySQL, SQL Server и т. Д.). Особенно для 'Row_Number()' это может быть важно. – Smandoli
Возможно нет. Попробуйте UNION вместо UNION ALL. Произведение UNION - это отличный результат. –