2013-03-27 85 views
0

我有一種情況,其中可以有多種類型的後刪除重複記錄(:XXXXXX,YYYYYY和類型2:TYPE1 AAAAA,BBBBB)對於相同的NUM(提供的條件相同的用戶名組合多個主鍵

相關聯

我的意思是可以有多個類型爲相同的用戶名相同的數量和p_id 現在我必須結合值1,2,3,4,5爲PK 1和PK 2(圖1),因爲他們有類似的類型(類型1 XXXXX和類型2:AAAAA)兩者的主鍵

這些值必須與最大(PK進行組合),即PK = 2按圖1

然後結果集應該看起來如圖2所示。 將這些值合併後,我必須從表名中刪除pk 1:值,應該只有max(pk)(這是pk = 2),因爲我合併價值。

有人可以幫助我這個。我會很感激你的幫助

Pk num P_id year Value value value value value type type username 
          1  2  3  4  5  1  2 

1 123456 4567 2012 $2  $5  0  0 0 xxxxx aaaaa  mr.nice 
2 123456 4567 2012 $1  $5  $2 0 0 xxxxx aaaaa  mr.nice 
3 123456 4567 2012  0  $2  0  0 0 yyyyy bbbbb  mr.nice 
Fig 1: Table name: values 


Pk num P_id year Value value value value value type type username 
          1  2  3  4  5  1  2 

2 123456 4567 2012 $3 $10  $2 0 0  xxxxx aaaaa mr.nice 
3 123456 4567 2012 $0  2  0 0  0  yyyyy bbbbb mr.nice 

圖2:表名:結合您結合使用GROUP BY子句值的值

+2

歡迎來到StackOverflow。請不要在你的問題中添加像「*************」這樣的噪音和混亂。它不會讓你的答案更快,它分散你想要問的問題,而且浪費了那些不得不刪除它的人的時間。如果你花時間和精力去問一個更具體的問題(或者清理問題的內容,使其更易讀),這會更好。謝謝。 – 2013-03-27 23:47:20

+1

此外,我不知道「圖1」和「圖2」試圖傳達什麼,因爲格式不可讀。請[編輯]嘗試清理它,以便我們可以告訴它應該代表什麼。 (您可以點擊文本區域右上角的小橙色'?'來獲取格式幫助,但至少需要代碼和示例數據縮進四個空格來標記它。)謝謝。 – 2013-03-27 23:50:39

+0

謝謝你的建議!我試圖上傳圖像,但它不允許我,因爲我沒有最低的聲譽 – sunny 2013-03-27 23:57:19

回答

0

後的值 結果SET-。當你使用這個子句時,你需要使用聚合函數(比如MAX,SUM等)。這裏是你會用你的問題的例子:我沒有使用所有的領域

SELECT MAX(Pk), 
    num, 
    P_id, 
    year, 
    SUM(Value1), 
    SUM(value2), 
    SUM(value3), 
    SUM(value4), 
    SUM(value5), 
    type1, 
    type2, 
    username 
FROM YourTable 
GROUP BY 
    num, 
    P_id, 
    year, 
    type1, 
    type2, 
    username 
0

但你這個例子的一點:

@ FIG1是一個臨時表,大約類似於你想要做的,我們會把重要的價值插入它。

declare @fig1 table (PK int, val1 money, val2 money, vtype varchar(5), vtype2 varchar(5) ) 
declare @uPK table (PK int) 

insert into @fig1 values 
(1, 2, 5, 'xxxxx', 'aaaaa'), 
(2, 1, 5, 'xxxxx', 'aaaaa'), 
(3, 0, 2, 'yyyyy', 'bbbbb'); 

這裏是魔法開始的地方,我們使用了常用的表表達式計算領域的新的價值觀應該是什麼,命名新的飛行表:更新

WITH Updates 
AS (
select 
    max(PK) as PK, 
    sum(val1) as Val1, 
    sum(val2) as Val2 
from @fig1 
group by vtype, vtype2) 

接下來我們根據這個新聚合表更新值,並使用我們的OUTPUT關鍵字告訴我們哪些值已更新,並將這些值推入臨時變量@uPK。

Update f 
    set val1=U.Val1, val2=U.val2 
OUTPUT INSERTED.PK into @uPK 
from Updates U 
inner join @fig1 f on U.pk=f.pk; 

一旦我們知道哪些應該留下來,我們只是刪除那些不應該在那裏。而且,通過這種刪除,你可能只想刪除那些與已更新類型相匹配的內容,但基本的T-SQL會讓你走上這條路。

delete f 
from @fig1 f 
left outer join @uPK p on f.PK=p.PK 
where p.PK is null 

select * from @fig1 
+0

謝謝多傑森! – sunny 2013-03-28 01:23:47

+0

讓我知道它是否工作,這些測試表工作正常,當然,您需要添加額外的字段和更改名稱。 – 2013-03-28 01:39:00

+0

當然!會讓你知道。 – sunny 2013-03-28 02:22:05