-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

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

You mean something like:

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

Watch out on possible misspelling.

I used your query from question as subquery LEFT JOINED (to make sure that all records from subquery will stay after JOIN) with Clientes table.

于 2012-08-13T19:27:16.827 に答える