[英]Update column using Subquery
我正在嘗試通過加入payid用payc表的eid更新pay表的eid。在PayC表中,匹配的payid s有重復的eid s',需要為每個匹配的PAYID僅獲得一個EID
update PAY
SET eid = (select t.EID from (select a.EID,a.PAYID, count(a.EID) as cnt
from PAYC a,PAYC b
where a.payid = b.payid
group by a.PAYID,a.eid
having count( a.eid) > 1) t
where T.payid = PAYID)
WHERE EXISTS (select 'X' from (select a.EID,a.PAYID, count(a.EID) as cnt
from PAYC a,PAYC b
where a.payid = b.payid
group by a.PAYID,a.eid
having count( a.eid) > 1) t
where T.payid = PAYID)
錯誤:子查詢返回了多個值。 當子查詢遵循=,!=,<,<=,>,> =或將子查詢用作表達式時,不允許這樣做。
我們可以通過此查詢找到重復的EID,但只需要獲取一個EID
select a.EID,COUNT(a.PAYID), count(a.EID) as cnt
from PAYC a,PAYC b
where a.payid = b.payid
group by a.PAYID,a.eid
having count( a.eid) > 1 AND
COUNT(a.PAYID) >1
樣本數據
paycid payid eid amount year quarter
1 101 1000 2000 2001 1
2 101 1000 3000 2001 2
需要獲取
eid
1000
匹配的Payid
select top 1 * from stuff
可能會。
這樣的事情可能會有所幫助?
WITH Duplicates AS (
SELECT
a.EID,
a.PAYID,
ROW_NUMBER() OVER (PARTITION BY a.PAYID ORDER BY a.EID) AS ROWID
FROM
PAYC a
INNER JOIN PAYC b ON b.PAYID = a.PAYID
GROUP BY
a.EID,
a.PAYID
HAVING
COUNT(a.EID) > 1)
UPDATE
p
SET
EID = d.EID
FROM
PAY p
INNER JOIN Duplicates d ON d.PAYID = p.PAYID AND d.ROWID = 1;
盡管我不得不承認,我不理解您從PAYC到PAYC的自我加入的邏輯。 您肯定不需要這樣做來查找每個PAYID有多個EID的情況嗎? 在那種情況下,您可以完全刪除INNER JOIN PAYC b行?
再多考慮一下之后,您能不能簡單地做到這一點?
WITH Duplicates AS (
SELECT
PAYID,
MAX(EID) AS EID
FROM
PAYC
GROUP BY
PAYID
HAVING
COUNT(DISTINCT EID) > 1)
UPDATE
p
SET
EID = d.EID
FROM
PAY p
INNER JOIN Duplicates d ON d.PAYID = p.PAYID;
然后使用MAX,MIN或您需要的任何聚合來選擇要用於更新PAY表的EID(我的示例使用MAX)。 這就是為什么您的原始查詢不起作用,您沒有告訴它要使用哪個EID以及它返回多個值的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.