2017-06-05 213 views
2

應用組得到計數我希望得到以下結果:SQL查詢通過

源表:

Cnt A B 
4 ABC YU/FGH 
5 ABC YU/DFE 
5 ABC KL 
2 LKP BN/ER 
4 JK RE 

結果:

Cnt A B 
9 ABC YU 
5 ABC KL 
2 LKP BN 
4 JK RE 

在這裏,我想通過計數分組'B'並且只想顯示'B'記錄直到特殊字符(/)

+1

大。你試過什麼了? –

+2

你正在使用哪個dbms? /總是第三個字符? – jarlh

+0

SQL SERVER,沒有/可以是在任何地方 – Abcdf

回答

0

基本上,你將必須過濾出「​​/」符號後的所有字符,然後應用SUMGROUP BY。你可以在下面看到。內部查詢過濾掉不需要的字符串和外部查詢是否SUMGROUP BY

SELECT  SUM(t.Cnt), t.A, t.B 
FROM  (
       SELECT  Cnt, 
          A, 
          CASE 
           WHEN CHARINDEX('/', B) > 0 THEN SUBSTRING(B, 0, CHARINDEX('/', B)) 
          ELSE B 
          END AS B 

       FROM  #Tab 
      ) t 
GROUP BY t.A, t.B 
ORDER BY t.A 

你可以看到這方面的工作在這裏 - >http://rextester.com/IQJ79191

希望這有助於!

+0

謝謝......它的工作:) – Abcdf

+0

@Abcdf不客氣!如果這個答案有助於你解決你的問題,請將其標記爲答案,以便它可以幫助其他人偶然發現! –

0

你可以得到你的字符串直到'/'b y使用SUBSTRING

select 
count(SUBSTRING(reverse(B),0,charindex('/',reverse(B)))), 
A, 
SUBSTRING(reverse(B),0,charindex('/',reverse(B))) 
from source_table group by B; 
0

解甲骨文 - SUBSTR(B,0,INSTR(B, '/',1)-1)乙

將這個無論是在選擇和GROUPBY

0

我可以建議你使用這樣的查詢:

select 
    sum(Cnt) Cnt, 
    A, 
    left(B, charindex('/',B+'/',0)-1) B -- Using `+'\'` will do the trick 
from 
    t 
group by 
    A, 
    left(B, charindex('/',B+'/',0)-1); 
0

通過使用字符串和CHARINDEX函數。

;WITH SourceTable(Cnt,A,B) AS 
(
SELECT 4,'ABC','YU/FGH'UNION ALL 
SELECT 5,'ABC','YU/DFE'UNION ALL 
SELECT 5,'ABC','KL' UNION ALL 
SELECT 2,'LKP','BN/ER' UNION ALL 
SELECT 4,'JK','RE' 
) 

SELECT SUM(Cnt) AS Cnt,A,CASE WHEN CHARINDEX('/',B) = 0 THEN B 
           ELSE SUBSTRING(B,0,CHARINDEX('/',B)) END AS [B] FROM SourceTable 
GROUP BY A,CASE WHEN CHARINDEX('/',B) = 0 THEN B 
       ELSE SUBSTRING(B,0,CHARINDEX('/',B)) END 
ORDER BY Cnt DESC 
0

嘗試此查詢 -

SELECT SUM(Cnt) AS [COUNT] 
    ,A 
    ,CASE 
     WHEN CHARINDEX('/', B) > 0 
      THEN SUBSTRING(B, 1, (CHARINDEX('/', B) - 1)) 
     ELSE B 
     END 
FROM tblSample 
GROUP BY A, B 
ORDER BY A, B