应用组得到计数我希望得到以下结果: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'记录直到特殊字符(/)
应用组得到计数我希望得到以下结果: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'记录直到特殊字符(/)
基本上,你将必须过滤出“/”符号后的所有字符,然后应用SUM
和GROUP BY
。你可以在下面看到。内部查询过滤掉不需要的字符串和外部查询是否SUM
和GROUP 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
希望这有助于!
谢谢......它的工作:) – Abcdf
@Abcdf不客气!如果这个答案有助于你解决你的问题,请将其标记为答案,以便它可以帮助其他人偶然发现! –
你可以得到你的字符串直到'/'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;
解甲骨文 - SUBSTR(B,0,INSTR(B, '/',1)-1)乙
将这个无论是在选择和GROUPBY
我可以建议你使用这样的查询:
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);
通过使用字符串和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
尝试此查询 -
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
大。你试过什么了? –
你正在使用哪个dbms? /总是第三个字符? – jarlh
SQL SERVER,没有/可以是在任何地方 – Abcdf