基於原來的問題的有限信息,試試這個:
DECLARE @YourTable table(MemberID int, SchemeName varchar(10), BenefitID int, BenefitAmount int)
INSERT INTO @YourTable VALUES (10,'ABC' ,1,10000)
INSERT INTO @YourTable VALUES (10,'ABC' ,1,2000)
INSERT INTO @YourTable VALUES (10,'ABC' ,2,5000)
INSERT INTO @YourTable VALUES (10,'A.B.C',3,11000)
INSERT INTO @YourTable VALUES (11,'ABC' ,1,10000)
INSERT INTO @YourTable VALUES (11,'ABC' ,1,2000)
INSERT INTO @YourTable VALUES (11,'ABC' ,2,5000)
INSERT INTO @YourTable VALUES (11,'A.B.C',3,11000)
INSERT INTO @YourTable VALUES (10,'mnp',3,11000)
INSERT INTO @YourTable VALUES (11,'mnp' ,1,10000)
INSERT INTO @YourTable VALUES (11,'mnp' ,1,2000)
INSERT INTO @YourTable VALUES (11,'mnp' ,2,5000)
INSERT INTO @YourTable VALUES (11,'mnp',3,11000)
SELECT
MemberID, REPLACE(SchemeName,'.','') AS SchemeName
,SUM(CASE WHEN BenefitID=1 THEN BenefitAmount ELSE 0 END) AS B1
,SUM(CASE WHEN BenefitID=2 THEN BenefitAmount ELSE 0 END) AS B2
,SUM(CASE WHEN BenefitID=3 THEN BenefitAmount ELSE 0 END) AS B3
FROM @YourTable
GROUP BY MemberID, REPLACE(SchemeName,'.','')
ORDER BY MemberID, REPLACE(SchemeName,'.','')
輸出:
MemberID SchemeName B1 B2 B3
----------- ----------- ----------- ----------- -----------
10 ABC 12000 5000 11000
10 mnp 0 0 11000
11 ABC 12000 5000 11000
11 mnp 12000 5000 11000
(4 row(s) affected)
可能有多少個BenefitID值?每個MemberID和SchemeName都一樣嗎? – 2010-03-03 14:08:01
@Karl根據您的意見,您似乎有兩個問題:將行組合成列,以及如何根據不同的文本字段組合行。更難的是基於不同文本的組合行,所以爲什麼不詳細說明。給出一些很好的例子,說明你正在處理什麼以及哪些是可以接受的,因爲任何算法都不會100%準確。如果你有一個算法來匹配這些,即使它只是一個想法(不是代碼)給它。否則在你的問題上沒有太多的信息可以繼續,你也不可能得到更多的幫助。 – 2010-03-03 14:47:02