2010-08-18 177 views
1

我有一個表中的格式如下數據:幫助創建一個SQL SELECT語句

Acct# Amount 
123  3.4 
123T  4.5 
124  2.3 
124T  4.5 
125  1.2 
125T  2.4 

如何創建它總計了賬號爲123 + 123T,並給出了下面的輸出select語句:

123 7.9 
124 6.8 
125 3.6 
+2

哪'RDBMS'您使用的?你想如何分組賬戶:在第三個字符後面扔掉所有東西;扔掉所有非數字字符,不知何故? – Quassnoi 2010-08-18 15:04:43

回答

5

你不說SQL

的任何特定方言
SELECT LEFT(Acct#,3), SUM(Amount) 
FROM yourTable 
GROUP BY LEFT(Acct#,3) 

或者處理arbitrar Y軸長度賬號

SELECT 
     CASE 
        WHEN Acct# LIKE '%T' 
        THEN SUBSTRING(Acct#,1,LEN(@Acct)-1) 
        ELSE Acct# 
     END, 
     SUM(Amount) 
FROM  yourTable 
GROUP BY 
     CASE 
        WHEN Acct# LIKE '%T' 
        THEN SUBSTRING(Acct#,1,LEN(@Acct)-1) 
        ELSE Acct# 
     END 

還是一個比較通用的方法,將處理任意映射可能是建立一個映射表,你可以再加入上。這裏有很多關於需要應用的規則的缺失信息!

SELECT d.b, SUM(yt.Amount) 
FROM yourTable yt 
join (
     SELECT '123' as a, '123' as b UNION ALL 
     SELECT '123T' as a, '123' as b UNION ALL 
     SELECT '124' as a, '124' as b UNION ALL 
     SELECT '124T' as a, '124' as b UNION ALL 
     SELECT '125' as a, '125' as b UNION ALL 
     SELECT '125T' as a, '125' as b 
) d ON d.a = yt.Acct# 
GROUP BY d.b 
+1

問題作者請注意,您的帳號總是三位數字? – 2010-08-18 15:05:23

1

您也可以嘗試

SELECT REPLACE([Acct#],'T', ''), SUM(Amount) 
FROM Acct 
GROUP BY REPLACE([Acct#],'T', '') 

測試數據

create table acct 
([acct#] varchar(10), 
amount decimal(10,2) 
) 

insert into acct([acct#], amount) values ('123', 3.4) 
insert into acct([acct#], amount) values ('123T', 4.5) 
insert into acct([acct#], amount) values ('124', 2.3) 
insert into acct([acct#], amount) values ('124T', 4.5) 
insert into acct([acct#], amount) values ('125', 1.2) 
insert into acct([acct#], amount) values ('125T', 2.4) 
+0

感謝您的快速回復傢伙。我會試試看。 – 2010-08-18 15:18:24

1

我會做的是:

select b.acct#, (a.Amount + b.Amount) as Amount FROM yourTable as a inner join yourTable as b
ON a.acct# = b.acct# + 'T'

+0

這會訪問表格兩次,並假定將始終有一個對應的「T」記錄加入。 +1雖然。 – 2010-08-18 15:39:10