可以在同一数据表上显示ID为空和ID为非空的数据的SQL查询?
你好,我有个问题 我先给你看看我的桌子可以在同一数据表上显示ID为空和ID为非空的数据的SQL查询?,sql,select,join,null,Sql,Select,Join,Null,你好,我有个问题 我先给你看看我的桌子 [Vendedores]( [IdVendedor] [int] IDENTITY(1,1) NOT NULL, [IdGrupo] [int] NULL, [IdInfoContacto] [int] NULL, [ApellidoPaterno] [varchar](30) NULL, [ApellidoMaterno] [varchar](30) NULL, [Nombre] [varchar](35)
[Vendedores](
[IdVendedor] [int] IDENTITY(1,1) NOT NULL,
[IdGrupo] [int] NULL,
[IdInfoContacto] [int] NULL,
[ApellidoPaterno] [varchar](30) NULL,
[ApellidoMaterno] [varchar](30) NULL,
[Nombre] [varchar](35) NULL,
[Estado] [varchar](10) NULL,
CONSTRAINT [PK_Vendedores] PRIMARY KEY CLUSTERED
[Clientes](
[IdCliente] [int] IDENTITY(1,1) NOT NULL,
[IdGrupo] [int] NULL,
[IdVendedor] [int] NULL,
[IdDireccion] [int] NULL,
[IdInfoContacto] [int] NULL,
[FechaAlta] [date] NULL,
[ApellidoPaterno] [varchar](30) NULL,
[ApellidoMaterno] [varchar](30) NULL,
[Nombre] [varchar](40) NULL,
[Empresa] [text] NULL,
[Estado] [varchar](20) NULL,
[Estatus] [varchar](20) NULL,
CONSTRAINT [PK_Clientes] PRIMARY KEY CLUSTERED
[dbo].[Mensajes](
[IdMensaje] [int] IDENTITY(1,1) NOT NULL,
[IdCliente] [int] NULL,
[IdVendedor] [int] NULL,
[CorreoRemitente] [varchar](100) NULL,
[CorreoCliente] [varchar](100) NULL,
[CorreosAdicionales] [varchar](max) NULL,
[Tema] [varchar](100) NULL,
[Mensaje] [varchar](max) NULL,
[Fecha] [date] NULL,
[Hora] [time](5) NULL,
CONSTRAINT [PK_Mensajes] PRIMARY KEY CLUSTERED
[Archivos](
[IdArchivo] [int] IDENTITY(1,1) NOT NULL,
[IdMensaje] [int] NULL,
[Nombre] [varchar](max) NULL,
[Ubicacion] [varchar](50) NULL,
CONSTRAINT [PK_Archivos] PRIMARY KEY CLUSTERED
在我正在开发的系统中,有两种方式可以发送消息…:
第一个是,您选择一个客户机,当发送消息时,客户机的ID(IdCliente)从Clientes表中获取,并插入到Mensajes表的新行中。
这样,当您想要检查所有发送的消息时,您可以清楚地看到发送到哪个客户机
第二个是免费的,你可以发送给任何你想要的人,你不需要选择客户。因此,当您注册新消息时,IdCliente列将为null
现在需要注意的是:Vendedor是发送消息的卖家或用户,Archivos表示文件,如果您想附加文件,则会在Archivos中为每一个文件插入一行,并且每个文件都具有相同的IdMensaje
目前,我有一个查询,允许我查看所有邮件(与客户机一起),并显示有多少文件附加到该邮件。这是:
SELECT (Clientes.ApellidoPaterno + ' ' + Clientes.ApellidoMaterno + ' ' + Clientes.Nombre) AS Cliente, Mensajes.* FROM (SELECT Mensajes.IdMensaje, Mensajes.IdCliente, Mensajes.IdVendedor, Mensajes.CorreoRemitente, 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.IdVendedor, Mensajes.CorreoRemitente, Mensajes.CorreoCliente, Mensajes.CorreosAdicionales, Mensajes.Tema, Mensajes.Mensaje, Mensajes.Fecha, Mensajes.Hora) AS Mensajes JOIN Clientes ON Clientes.IdCliente = Mensajes.IdCliente ORDER BY Mensajes.Fecha DESC, Mensajes.Hora DESC
“(Clientes.ApellidoPaterno+“”+Clientes.ApellidoMaterno+“”+Clientes.Nombre)作为客户”显示客户的全名
但是,现在我想有一个查询,其中显示与上面相同的信息。。。再加上以下几点
- IdCliente=null的邮件
- 如果IdCliente=null,那么我上面提到的Cliente列将是“”(空白)
提前感谢首先,将您的加入更改为左加入:
LEFT JOIN Clientes ON Clientes.IdCliente = Mensajes.IdCliente
这将允许没有关联IdCliente的邮件保留。要获得所需的空白,请使用合并:
COALESCE(Clientes.ApellidoPaterno + ' ' + Clientes.ApellidoMaterno + ' ' + Clientes.Nombre, '') AS Cliente
请重写你的帖子。就其本身而言,这并不是一个真正的问题。此外,您可能希望在要求他人为您编写查询之前发布更多尝试。