2017-06-05 88 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