我有两个表需要咨询一个查询,我有Participante
表来存储来自用户的一些数据和ParticipanteResultado
来存储该用户的答案。< / p>
表Participante
participanteID,
**other fields**
表ParticipanteResultado
participanteResultadoID,
participanteID,
tipo,
quantidadeValidas
我的ParticipanteResultado
表每个用户可以有大约10个结果,tipo
上的结果可能不同(A,B,C,D ......)。
participanteResultadoID participanteID tipo quantidadeValidas
4 88 S 5
5 88 E 5
6 88 A 2
7 88 I 1
8 94 S 2
9 94 E 3
10 94 A 2
11 94 I 1
12 98 S 0
13 98 E 0
14 98 A 0
15 98 I 0
我需要的是显示用户数据和他的最佳结果。通过最佳结果,我的意思是quantidadeValidas
字段上具有最高值的结果。
我的问题是,在我给出ParticipanteResultado
数据的示例中,我让用户88
有一个平局,我需要带上这两个值,它们可以在同一列中像( S,E)。
如果他没有任何有效答案quantidadeValidas = 0
,我就不需要他tipo
。
UPDATE 在@lrb
的帮助下完成了一些工作SELECT participanteID, nome, email, unidadeCE, telefone,
tipo =
SUBSTRING((
SELECT ', ' + CAST(tipo AS NVARCHAR(10))
FROM
(
SELECT DISTINCT pr.tipo, pr.participanteID
FROM ParticipanteResultado pr
WHERE pr.participanteID = p.participanteID AND quantidadeValidas > 0
)AS X2
ORDER BY tipo FOR XML PATH( '' )
), 3, 1000 )
FROM Participante p;
输出:
participanteID nome email unidadeCE telefone tipo
88 teste teste teste@teste.com.br 41925 (11) 11111-1111 E, S
94 teste teste teste@teste.com 36433 (11) 11111-1111 E, I, S
但是在participanteID 94
的情况下,我应该只将E打印为tipo
,因为它的值最高
答案 0 :(得分:1)
而不是
SELECT DISTINCT pr.tipo, pr.participanteID
FROM ParticipanteResultado pr
WHERE pr.participanteID = p.participanteID AND quantidadeValidas > 0
作为最里面的SELECT,您可以使用:
SELECT TOP (1) WITH TIES pr.tipo
FROM ParticipanteResultado pr
WHERE pr.participanteID = p.participanteID AND quantidadeValidas > 0
ORDER BY quantidadeValidas DESC
在Paul Williams * 的现在删除的答案中,首次建议使用此子查询(仅限AND quantidadeValidas > 0
位)。
* 然而,保罗没有使用FOR XML中间层,如果没有它,他的解决方案就会打破带有关系的行(他最终可能已经意识到这一点,这可能就是他的原因)删除了他的答案)。
答案 1 :(得分:0)
将Dense Rank
与Window function
SELECT participanteID,
nome,
email,
unidadeCE,
telefone,
tipo
FROM (SELECT Dense_rank()OVER(partition BY a.participanteID ORDER BY quantidadeValidas) Rnk,
*
FROM Participante a join ParticipanteResultado b on a.participanteID = b.participanteID) P
WHERE Rnk = 1