我有一個表中的格式如下數據:幫助創建一個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
我有一個表中的格式如下數據:幫助創建一個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
你不說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
問題作者請注意,您的帳號總是三位數字? – 2010-08-18 15:05:23
您也可以嘗試
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)
感謝您的快速回復傢伙。我會試試看。 – 2010-08-18 15:18:24
我會做的是:
select b.acct#, (a.Amount + b.Amount) as Amount FROM yourTable as a inner join yourTable as b
ON a.acct# = b.acct# + 'T'
這會訪問表格兩次,並假定將始終有一個對應的「T」記錄加入。 +1雖然。 – 2010-08-18 15:39:10
哪'RDBMS'您使用的?你想如何分組賬戶:在第三個字符後面扔掉所有東西;扔掉所有非數字字符,不知何故? – Quassnoi 2010-08-18 15:04:43