我有一個查詢,它有時會返回不需要的行。根據主鍵的行數進行篩選
SELECT TOP 100 PERCENT
ca.item_id, ca.FIELD_ID, ca.attr_val, ca.upd_dtt, ca.upd_usr
FROM
contract_attr ca
WHERE
EXISTS (SELECT 1
FROM contract_attr ca_326
WHERE ca.item_id = ca_326.item_id
AND ca_326.field_id = 326
AND ca_326.ATTR_VAL = 'Y')
UNION ALL
SELECT
ca.item_id, 9999, mf.[ITEM_NAME], '', ''
FROM
mfr mf
JOIN
contract_attr ca ON ca.attr_val = mf.[ITEM_PK]
ORDER BY
ca.item_id
ITEM_ID是10-13圖像上只有1行。
我想過濾查詢中的這些行。看着它,我應該添加具有:
SELECT TOP 100 PERCENT
ca.item_id, ca.FIELD_ID, ca.attr_val, ca.upd_dtt, ca.upd_usr
FROM
contract_attr ca
WHERE
EXISTS (SELECT 1
FROM contract_attr ca_326
WHERE ca.item_id = ca_326.item_id
AND ca_326.field_id = 326
AND ca_326.ATTR_VAL = 'Y')
UNION ALL
SELECT
ca.item_id, 9999, mf.[ITEM_NAME], '', ''
FROM
mfr mf
JOIN
contract_attr ca ON ca.attr_val = mf.[ITEM_PK]
HAVING
COUNT(ca.item_id) > 1
ORDER BY
ca.item_id
但我得到這個錯誤,不明白爲什麼:
列「contract_attr.ITEM_ID」在選擇列表中無效因爲它不包含在聚合函數或GROUP BY子句中。
我在做什麼錯,我該如何解決?
因爲你有一堆其他字段,你想要返回你可能想要使用有一個子查詢,或者如果足夠的分組添加到一個group by子句。 – scsimon
@scsimon當你說子查詢時,你的意思是包裝整個事情? –
類似於'... JOIN contract_attr ca on ca.attr_val = mf。[ITEM_PK] INNER JOIN(SELECT item_id FROM contract_attr group by item_id having count(item_id)> 1)x on x.item_id = ca.item_id' in your你的工會的第二部分。基本上添加一個內部連接 – scsimon