SQL Server-行到列(分组)

SQL Server-行到列(分组),sql,sql-server,tsql,pivot,rows,Sql,Sql Server,Tsql,Pivot,Rows,我曾尝试使用PIVOT将一些行合并到列中,但问题是,我必须对它们进行分组,我不知道该如何做 SQL查询: select res.tipo, it.itemname as item, sum(resi.quantity) as qt from Reserve as res inner join ReserveItems as resi on res.id_reserve = resi.id_reserve inner

我曾尝试使用PIVOT将一些行合并到列中,但问题是,我必须对它们进行分组,我不知道该如何做

SQL查询:

select  res.tipo,
            it.itemname as item,
            sum(resi.quantity) as qt
from    Reserve as res inner join
            ReserveItems as resi on res.id_reserve = resi.id_reserve inner join
            Items as it on resi.defindex = it.defindex
where   res.situacao = 3
group by res.tipo, it.id, it.itemname
order by tipo, it.id
结果:

tipo item qt ------ ---------------------------------------------------------------------------------------------------- ----------- 0 Mann Co. Supply Crate Key 6 0 Tour of Duty Ticket 10 0 Reinforced Robot Emotion Detector 5 0 Reinforced Robot Bomb Stabilizer 1 0 Battle-Worn Robot Taunt Processor 3 0 Battle-Worn Robot KB-808 22 0 Battle-Worn Robot Money Furnace 19 1 Mann Co. Supply Crate Key 41 1 Tour of Duty Ticket 31 1 Pristine Robot Currency Digestor 1 1 Pristine Robot Brainstorm Bulb 2 1 Reinforced Robot Emotion Detector 32 1 Reinforced Robot Humor Supression Pump 45 1 Reinforced Robot Bomb Stabilizer 39 1 Battle-Worn Robot Taunt Processor 69 1 Battle-Worn Robot KB-808 78 1 Battle-Worn Robot Money Furnace 109
不确定这是否能回答您的问题,但我发现您将
tipo
包含在您的group by子句中,这将导致记录被拆分,因为根据您的信息,“Mann Co.Supply Crate Key”的
tipo
可以为0或1。这将按照
0曼恩公司供应板条箱钥匙
和第二组
1曼恩公司供应板条箱钥匙
对他们进行分组

编辑:查看您的查询,您可能需要以下内容:

select  
            it.itemname as item,
            sum(case when resi.tipo = 0 then resi.quantity else 1 end) as qty_0,
            sum(case when resi.tipo = 1 then resi.quantity else 0 end) as qty_1
from    Reserve as res inner join
            ReserveItems as resi on res.id_reserve = resi.id_reserve inner join
            Items as it on resi.defindex = it.defindex
where   res.situacao = 3
group by it.itemname
order by tipo, it.id
请记住,如果不知道表的结构,就有点困难:)

没有临时表?好的,@temp变量或派生表,甚至是一个CTE,在进行透视之前进行分组。
select  it.itemname as item,
            sum(case when res.tipo = 0 then resi.quantity else 0 end) as qt_compra,
            sum(case when res.tipo = 1 then resi.quantity else 0 end) as qt_venda
from    Reserve as res inner join
            ReserveItems as resi on res.id_reserve = resi.id_reserve inner join
            Items as it on resi.defindex = it.defindex
where   res.situacao = 3
group by it.id, it.itemname
order by it.id
select  
            it.itemname as item,
            sum(case when resi.tipo = 0 then resi.quantity else 1 end) as qty_0,
            sum(case when resi.tipo = 1 then resi.quantity else 0 end) as qty_1
from    Reserve as res inner join
            ReserveItems as resi on res.id_reserve = resi.id_reserve inner join
            Items as it on resi.defindex = it.defindex
where   res.situacao = 3
group by it.itemname
order by tipo, it.id