Eu tenho duas tabelas das quais preciso extrair dados. Eu preciso produzir um total de pedido na consulta. Deve ser direto, mas obtenho resultados imprecisos para quem tem vários pedidos. Este é o meu DDL
Create Table #first
(
userid varchar(100)
,orderqty int
,orderprice float
,orderdesc varchar(500)
,orderdate datetime
)
Create Table #second
(
userid varchar(100)
,orderstatus varchar(100)
,orderreviewstatus varchar(100)
)
Insert Into #first VALUES
('emp12', '14', '10', 'firstorder', '2016-08-11 13:59:23.363')
,('bla', '1', '20', 'red socks', '2016-08-11 13:59:23.363')
,('gra23', '2', '4', 'black coat', '2016-08-11 13:59:23.363')
,('meh33', '5', '2', 'orange socks', '2016-08-11 13:59:23.363')
,('meh33', '3', '1', 'blue trousers', '2016-08-13 13:59:23.363')
Insert Into #second VALUES
('emp12', 'Shipped', 'Reviewed')
,('bla', 'Shipped', 'Reviewed')
,('gra23', 'Shipped', 'Reviewed')
,('meh33', 'Shipped', 'Reviewed')
,('meh33', NULL, NULL)
Neste exemplo, apenas o id de usuário meh33 tem dois pedidos, e esta é a minha consulta que estou usando
Select
a.userid
,a.orderqty
,a.orderprice
,SUM(a.orderqty*a.orderprice) As OrderTotal
,a.orderdesc
,a.orderdate
,b.orderstatus
,b.orderreviewstatus
FROM #first a
INNER JOIN #second b
ON a.userid = b.userid
GROUP BY a.userid, a.orderqty, a.orderprice, a.orderdesc, a.orderdate, b.orderstatus, b.orderreviewstatus
Esta é a saída que esta consulta produz (observe as várias entradas para meh33:
userid orderqty orderprice OrderTotal orderdesc orderdate orderstatus orderreviewstatus
bla 1 20 20 red socks 2016-08-11 13:59:23.363 Shipped Reviewed
emp12 14 10 140 firstorder 2016-08-11 13:59:23.363 Shipped Reviewed
gra23 2 4 8 black coat 2016-08-11 13:59:23.363 Shipped Reviewed
meh33 3 1 3 blue trousers 2016-08-13 13:59:23.363 NULL NULL
meh33 3 1 3 blue trousers 2016-08-13 13:59:23.363 Shipped Reviewed
meh33 5 2 10 orange socks 2016-08-11 13:59:23.363 NULL NULL
meh33 5 2 10 orange socks 2016-08-11 13:59:23.363 Shipped Reviewed
E esta é minha saída desejada: (uma linha para cada pedido)
userid orderqty orderprice OrderTotal orderdesc orderdate orderstatus orderreviewstatus
bla 1 20 20 red socks 2016-08-11 13:59:23.363 Shipped Reviewed
emp12 14 10 140 firstorder 2016-08-11 13:59:23.363 Shipped Reviewed
gra23 2 4 8 black coat 2016-08-11 13:59:23.363 Shipped Reviewed
meh33 5 2 10 orange socks 2016-08-11 13:59:23.363 Shipped Reviewed
meh33 3 1 3 blue trousers 2016-08-13 13:59:23.363
O que devo alterar em minha consulta para obter o retorno do conjunto de resultados desejado?
Você precisa alterar suas cláusulas GROUP BY e SELECT . Além disso, eu usaria Order_ID em vez de descrição para classificar.