Código SQL:
Ver originalCREATE TABLE #temp
(
IdPedido INT IDENTITY (1,1),
Fecha datetime,
Importe INT,
estadoPedido INT,
idoficina INT)
INSERT INTO #temp VALUES (getdate(),200,1,1)
INSERT INTO #temp VALUES (getdate(),100,1,1)
INSERT INTO #temp VALUES (getdate(),200,1,1)
INSERT INTO #temp VALUES (getdate(),200,2,1)
INSERT INTO #temp VALUES (getdate(),200,2,1)
INSERT INTO #temp VALUES (getdate(),200,1,2)
INSERT INTO #temp VALUES (getdate(),200,1,2)
CREATE TABLE #temp2
(
IdEstado INT,
Descripcion VARCHAR(200))
INSERT INTO #temp2 VALUES (1,'Abierto')
INSERT INTO #temp2 VALUES (2,'Cerrado')
CREATE TABLE #temp3
(
idoficina INT,
nombre VARCHAR(20)
)
INSERT INTO #temp3 VALUES (1,'Oficina 1')
INSERT INTO #temp3 VALUES (2,'Oficina 2')
SELECT DISTINCT t2.Descripcion,t4.total,t4.pedido,t4.fecha,t3.idoficina FROM #temp AS t1
LEFT JOIN #temp2 AS t2 ON (t1.estadoPedido=t2.IdEstado)
LEFT JOIN #temp3 AS t3 ON (t1.idoficina=t3.idoficina)
LEFT JOIN(
SELECT COUNT(estadopedido) AS total,idestado,MAX(fecha) AS fecha,MAX(IdPedido) AS pedido FROM #temp AS t1
LEFT JOIN #temp2 AS t2 ON (t1.estadoPedido=t2.IdEstado)
LEFT JOIN #temp3 AS t3 ON (t1.idoficina=t3.idoficina)
GROUP BY estadoPedido,IdEstado) AS t4 ON (t1.estadoPedido=t4.IdEstado AND t1.Fecha=t4.fecha AND t1.IdPedido=t4.pedido)
WHERE t4.IdEstado IS NOT NULL
Descripcion total pedido fecha idoficina
Abierto 5 7 2014-09-25 15:36:53.643 2
Cerrado 2 5 2014-09-25 15:36:53.643 1
Aclarando, el id_pedido se tiene que filtrar o sacar el maximo, no puedes contar todos los registros de un estado y presentar todos los pedidos, otra cosa quien te dijo que los deadlocks son por subquerys?? sabes que es un subquery???