2012-10-14 33 views
0

我有2列(ColA,ColB)都是數據類型Nvarchar。
我需要col B對於ColA中的值是唯一的SQL:在其他值更改時將字符串添加到字段

ColA中的某些行在ColA中具有2個不同的值,在ColB中具有相同的值(非唯一)。

我想編寫一個查詢,以便在末尾顯示ColB值和字母「D」(重複),其中ColA中的值正在更改爲其他值。

+1

你能更清楚一點嗎? ColA的價值變化意味着什麼? – Gidil

+1

你能提供樣品表數據嗎? –

+0

您可以具有*讀取*查詢(選擇)或*寫入*查詢(更新),但不能同時包含兩者。你的問題表明你想要一個查詢來做到這一點,你不能擁有。 – Bohemian

回答

1

據我所知,你想標記ColB值需要改變的行。

如果是這樣嘗試這樣的事情

SELECT t1.COLA, 
     t1.COLB + 'D' 
FROM TABLE1 t1 
     INNER JOIN TABLE1 t2 
       ON t1.COLB = t2.COLB 
        AND t1.COLA != t2.COLA 

這將只顯示「雙節」行。如果你想顯示所有的行,只需添加一個UNION到最後:

SELECT t1.COLA, 
     t1.COLB + 'D' 
FROM TABLE1 t1 
     INNER JOIN TABLE1 t2 
       ON t1.COLB = t2.COLB 
        AND t1.COLA != t2.COLA 
UNION 
SELECT * 
FROM TABLE1 
WHERE COLA NOT IN (SELECT t1.COLA 
        FROM TABLE1 t1 
          INNER JOIN TABLE1 t2 
            ON t1.COLB = t2.COLB 
             AND t1.COLA != t2.COLA) 

看到SQL Fiddle完整的例子。

+0

它看起來不錯!但是當我與UNION一起運行時,我得到這個結論:「使用UNION,INTERSECT或EXCEPT運算符組合的所有查詢必須在其目標列表中具有相同數量的表達式。」我敢肯定有什麼問題 – user1508682

+0

當使用UNION時,你必須確保UNION的兩邊都有相同的列! 在SQL Fiddle中設置您的查詢或將其發佈到此處,然後我會查看它。 – Gidil