-1

好吧,我已经在这篇文章中回答了我的问题...

如何从 SQL 中的另一个表中获取计数?

不过,现在我还有一个问题……

最后我使用了这个查询

SELECT 
  Mensajes.IdMensaje, 
  Mensajes.IdCliente, 
  Mensajes.CorreoCliente, 
  Mensajes.CorreosAdicionales, 
  Mensajes.Tema, 
  Mensajes.Mensaje, 
  Mensajes.Fecha, 
  Mensajes.Hora, 
  COUNT(Archivos.IdArchivo) AS Archivos 
FROM Mensajes 
LEFT OUTER JOIN Archivos ON Mensajes.IdMensaje = Archivos.IdMensaje 
GROUP BY 
  Mensajes.IdMensaje, 
  Mensajes.IdCliente, 
  Mensajes.CorreoCliente, 
  Mensajes.CorreosAdicionales, 
  Mensajes.Tema, 
  Mensajes.Mensaje, 
  Mensajes.Fecha, 
  Mensajes.Hora 
ORDER BY Mensajes.Fecha DESC, Mensajes.Hora DESC

在上一篇文章中我提到有一个名为 Clientes 的表,现在我想将它添加到上一个查询中(在选择上)

(Clientes.ApellidoPaterno + ' ' + 
 Clientes.ApellidoMaterno + ' ' + 
 Clientes.Nombre) AS Cliente

我尝试过使用 INNER、RIGHT OUTER 和 LEFT OUTER JOIN,但这些都不起作用......

我想显示珍贵查询显示的所有数据,但我想添加另一列显示客户的全名......

Clientes 在 Clientes.IdCliente = Mensajes.IdCliente 上有一个与 Mensajes 的 FK...

希望你能帮助我谢谢

4

3 回答 3

0

这应该这样做:

SELECT  M.IdMensaje, M.IdCliente, M.CorreoCliente, M.CorreosAdicionales, 
        M.Tema, M.Mensaje, M.Fecha, M.Hora, 
        COALESCE(C.ApellidoPaterno,'') + ' ' + COALESCE(C.ApellidoMaterno,'') + ' ' + COALESCE(C.Nombre,'') Cliente,
        COUNT(A.IdArchivo) AS Archivos
FROM Mensajes M
LEFT JOIN Archivos A
    ON M.IdMensaje = A.IdMensaje 
LEFT JOIN Clientes C
    ON C.IdCliente = N.IdCliente
GROUP BY M.IdMensaje, M.IdCliente, M.CorreoCliente, M.CorreosAdicionales, 
         M.Tema, M.Mensaje, M.Fecha, M.Hora, 
         COALESCE(C.ApellidoPaterno,'') + ' ' + COALESCE(C.ApellidoMaterno,'') + ' ' + COALESCE(C.Nombre,'')
ORDER BY M.Fecha DESC, M.Hora DESC
于 2012-08-13T19:26:09.443 回答
0

您只需要将 a 添加JOIN到表中,然后将字段添加到GROUP BY

SELECT 
  Mensajes.IdMensaje, 
  Mensajes.IdCliente, 
  Mensajes.CorreoCliente, 
  Mensajes.CorreosAdicionales, 
  Mensajes.Tema, 
  Mensajes.Mensaje, 
  Mensajes.Fecha, 
  Mensajes.Hora, 
  COUNT(Archivos.IdArchivo) AS Archivos,
  c.Cliente
FROM Mensajes 
LEFT OUTER JOIN Archivos 
    ON Mensajes.IdMensaje = Archivos.IdMensaje 
LEFT JOIN 
(
    SELECT IdCliente, (ApellidoPaterno + ' ' + ApellidoMaterno + ' ' + Nombre) Cliente
    FROM Clientes
) c
    on Mensajes.IdCliente = Clientes.IdCliente
GROUP BY 
  Mensajes.IdMensaje, 
  Mensajes.IdCliente, 
  Mensajes.CorreoCliente, 
  Mensajes.CorreosAdicionales, 
  Mensajes.Tema, 
  Mensajes.Mensaje, 
  Mensajes.Fecha, 
  Mensajes.Hora,
  c.Cliente
ORDER BY Mensajes.Fecha DESC, Mensajes.Hora DESC
于 2012-08-13T19:26:38.217 回答
0

你的意思是这样的:

SELECT
 Clientes.ApellidoPaterno + ' ' + Clientes.ApellidoMaterno + ' ' + Clientes.NombreCliente,
 Mensajes.*
FROM (
SELECT 
  Mensajes.IdMensaje, 
  Mensajes.IdCliente, 
  Mensajes.CorreoCliente, 
  Mensajes.CorreosAdicionales, 
  Mensajes.Tema, 
  Mensajes.Mensaje, 
  Mensajes.Fecha, 
  Mensajes.Hora, 
  COUNT(Archivos.IdArchivo) AS Archivos 
FROM Mensajes 
LEFT OUTER JOIN Archivos ON Mensajes.IdMensaje = Archivos.IdMensaje 
GROUP BY 
  Mensajes.IdMensaje, 
  Mensajes.IdCliente, 
  Mensajes.CorreoCliente, 
  Mensajes.CorreosAdicionales, 
  Mensajes.Tema, 
  Mensajes.Mensaje, 
  Mensajes.Fecha, 
  Mensajes.Hora 
) AS Mensajes
LEFT JOIN
  Clientes
ON
  Clientes.IdCliente = Mensajes.IdCliente
ORDER BY Mensajes.Fecha DESC, Mensajes.Hora DESC

注意可能的拼写错误。

我将问题中的查询用作子查询 LEFT JOINED(以确保子查询中的所有记录都将在 JOIN 之后保留)与Clientes表。

于 2012-08-13T19:27:16.827 回答