SQL查询-按字符串前缀分组

时间:2019-06-03 10:13:42

标签: sql sql-server

我正在处理分组查询。 我有一个名为CarParts的简单表,其中存储了一些汽车元素。 其中一些元素可用(类型前缀为“ 05”),而某些元素被阻止(类型前缀为“ 01”)。

我想编写选择查询,该查询将按序列号和类型将表CarParts分组,如下右侧所示。

enter image description here

4 个答案:

答案 0 :(得分:1)

您要条件聚合吗?

select serialnr, name,
       sum(case when type like '%-05' then amount else 0 end) as [05-available],
       sum(case when type like '%-01' then amount else 0 end) as [01-blocked]
from carparts
group by serialnr, name;

答案 1 :(得分:0)

您可以使用PIVOT获得所需的结果,如下所示-

SELECT SerialNr,
ISNULL([05-Available],0) [05-Available],
ISNULL([01-Available],0) [01-Available],
Name 
FROM
(
SELECT SerialNr,Amount,Name,RIGHT( Type,2) +'-Available' AS P_Column
FROM CarParts
) AS P
PIVOT
(
    SUM(Amount)
    FOR P_Column IN ([01-Available],[05-Available])

) AS PVT

答案 2 :(得分:0)

您可以在

时使用大小写
select SerialNr,Name,
   sum(case when right([Type],2)='01' then amount else 0 end) as blocked_01
   sum(case when right([Type],2)='05' then amount else 0 end)  as availabe_05
   from tbale_name group by SerialNr,Name 

答案 3 :(得分:0)

select SerialNr, 
       sum(case when Type  like '%-05' then Amount  else 0 end) as '05-available',
       sum(case when Type like '%-01' then Amount else 0 end) as '01-blocked',
       Name
from carparts
group by SerialNr, Name