¡嗨!
我正在尝试建立一个查询,该查询将根据特定参数填充数据集(GridView)。因此,如果参数为1,则应执行SELECT语句A,如果参数为2,则应执行SELECT语句B。
到目前为止,这是我的代码:
{
"name": "gulp.sass",
"version": "1.0.0",
"description": "Gulp, SASS + Slow running tasks",
"main": "gulpfile.js",
"scripts": {
"start": "gulp"
},
"author": "",
"license": "ISC",
"devDependencies": {
"browser-sync": "^2.2.0",
"gulp": "^3.8.11",
"gulp-sass": "^1.3.3",
"through2": "^0.6.3"
}
}
我收到此错误:
DECLARE @p varchar(20) = '2018-02'
DECLARE @f1 int = 1
DECLARE @f3 int = 1
SELECT
CASE
WHEN @f3 = 1
THEN
(
SELECT
[dbo].[N_Preinscripcion].[ID],
[dbo].[N_Sedes].[Sede] AS [SedePrint],
[dbo].[N_Preinscripcion].[Nombre] + ' ' + [dbo].[N_Preinscripcion].[Apellido] AS [NombrePrint],
CASE
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '1' THEN 'TI-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '2' THEN 'CC-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '3' THEN 'CE-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '4' THEN 'PP-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '5' THEN 'OT-' + [dbo].[N_Preinscripcion].[DocIdentidad]
END AS [TipoDocIdentidadPrint],
[dbo].[N_Programas_Master].[Nombre] AS [Programa],
SUBSTRING([dbo].[N_Programas_Master].[Nombre], 0, CHARINDEX('-', [dbo].[N_Programas_Master].[Nombre])) AS [ProgramaPln],
[dbo].[N_Programas_Tipos].[Tipo],
[dbo].[N_Preinscripcion].[CodigoTemporal],
CASE
WHEN
(
SELECT COUNT(*) FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])
) = 0
THEN '<article style="color: rgb(237,27,47)"><i class="fa fa-ban" aria-hidden="true"></i> Sin activar</article>'
ELSE '<article style="color: rgb(121,162,68)"><i class="fa fa-user" aria-hidden="true"></i> Activada</article>'
END AS [EstadoCuenta],
CASE
WHEN [dbo].[N_Preinscripcion].[Revisado1] = 'False' THEN '<article style="color: rgb(121,162,68)"><i class="fa fa-folder-open-o" aria-hidden="true"></i> Nuevo</article>'
WHEN [dbo].[N_Preinscripcion].[Revisado1] = 'True' THEN '<article style="color: rgb(15,134,137)"><i class="fa fa-folder-open" aria-hidden="true"></i> Revisado</article>'
END AS [Revisado1Print],
[dbo].[EstadosAdmision].[Icono] + ' ' + [dbo].[EstadosAdmision].[Estado] AS [EstadoAdm],
CONVERT(varchar(200), [dbo].[N_Preinscripcion].[FechaEnv], 106) AS [Fecha],
'<a href="inscripciones-detalles.aspx?sklid=' + CONVERT(varchar(max), [dbo].[N_Preinscripcion].[ID]) + '">Detalles</a>' AS [AClink],
CASE
WHEN (SELECT COUNT(*) FROM [dbo].[N_Seguimiento_Preinsc] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID])) = '0'
THEN '<span class="textoRojoSm"><i class="fa fa-ban fa-fw"></i> N/A</span>'
ELSE '<span class="textoVerdeSm"><i class="fa fa-check fa-fw"></i>('
+
CONVERT
(varchar(200),
(
SELECT COUNT(*) FROM [dbo].[N_Seguimiento_Preinsc] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID])
)
)
+ ')</span>'
+ ' <div class="tooltip">' + (SELECT TOP(1) [dbo].[N_Insc_EstadosSeguimiento].[Codigo] FROM [dbo].[N_Seguimiento_Preinsc] INNER JOIN [dbo].[N_Insc_EstadosSeguimiento] ON [dbo].[N_Insc_EstadosSeguimiento].[ID] = [dbo].[N_Seguimiento_Preinsc].[Codigo] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID]) ORDER BY [dbo].[N_Seguimiento_Preinsc].[ID] DESC) + '<span class="tooltiptext">' + (SELECT TOP(1) [dbo].[N_Seguimiento_Preinsc].[Comentario] + CONVERT(varchar(50), [dbo].[N_Seguimiento_Preinsc].[FechaEnv]) FROM [dbo].[N_Seguimiento_Preinsc] INNER JOIN [dbo].[N_Insc_EstadosSeguimiento] ON [dbo].[N_Insc_EstadosSeguimiento].[ID] = [dbo].[N_Seguimiento_Preinsc].[Codigo] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID]) ORDER BY [dbo].[N_Seguimiento_Preinsc].[ID] DESC) + '</span></div>'
END AS [Seguimiento]
FROM [dbo].[N_Preinscripcion]
INNER JOIN
[dbo].[N_Programas_Master]
ON [dbo].[N_Programas_Master].[ID] = [dbo].[N_Preinscripcion].[IdPrograma]
INNER JOIN
[dbo].[N_Programas_Tipos]
ON [dbo].[N_Programas_Tipos].[ID] = [dbo].[N_Programas_Master].[Tipo]
INNER JOIN
[dbo].[EstadosAdmision]
ON [dbo].[N_Preinscripcion].[Estado] = [dbo].[EstadosAdmision].[ID]
INNER JOIN
[dbo].[N_Sedes]
ON [dbo].[N_Sedes].[ID] = [dbo].[N_Preinscripcion].[Sede]
WHERE
([dbo].[N_Preinscripcion].[Periodo] = @p)
AND
([dbo].[N_Preinscripcion].[Sede] = @f1)
AND
((SELECT COUNT(*) FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])) > 0)
ORDER BY
[dbo].[N_Preinscripcion].[ID] DESC,
[dbo].[N_Preinscripcion].[Apellido] ASC,
[dbo].[N_Preinscripcion].[Nombre] ASC
)
ELSE
(
SELECT
[dbo].[N_Preinscripcion].[ID],
[dbo].[N_Sedes].[Sede] AS [SedePrint],
[dbo].[N_Preinscripcion].[Nombre] + ' ' + [dbo].[N_Preinscripcion].[Apellido] AS [NombrePrint],
CASE
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '1' THEN 'TI-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '2' THEN 'CC-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '3' THEN 'CE-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '4' THEN 'PP-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '5' THEN 'OT-' + [dbo].[N_Preinscripcion].[DocIdentidad]
END AS [TipoDocIdentidadPrint],
[dbo].[N_Programas_Master].[Nombre] AS [Programa],
SUBSTRING([dbo].[N_Programas_Master].[Nombre], 0, CHARINDEX('-', [dbo].[N_Programas_Master].[Nombre])) AS [ProgramaPln],
[dbo].[N_Programas_Tipos].[Tipo],
[dbo].[N_Preinscripcion].[CodigoTemporal],
CASE
WHEN
(
SELECT COUNT(*) FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])
) = 0
THEN '<article style="color: rgb(237,27,47)"><i class="fa fa-ban" aria-hidden="true"></i> Sin activar</article>'
ELSE '<article style="color: rgb(121,162,68)"><i class="fa fa-user" aria-hidden="true"></i> Activada</article>'
END AS [EstadoCuenta],
CASE
WHEN [dbo].[N_Preinscripcion].[Revisado1] = 'False' THEN '<article style="color: rgb(121,162,68)"><i class="fa fa-folder-open-o" aria-hidden="true"></i> Nuevo</article>'
WHEN [dbo].[N_Preinscripcion].[Revisado1] = 'True' THEN '<article style="color: rgb(15,134,137)"><i class="fa fa-folder-open" aria-hidden="true"></i> Revisado</article>'
END AS [Revisado1Print],
[dbo].[EstadosAdmision].[Icono] + ' ' + [dbo].[EstadosAdmision].[Estado] AS [EstadoAdm],
CONVERT(varchar(200), [dbo].[N_Preinscripcion].[FechaEnv], 106) AS [Fecha],
'<a href="inscripciones-detalles.aspx?sklid=' + CONVERT(varchar(max), [dbo].[N_Preinscripcion].[ID]) + '">Detalles</a>' AS [AClink],
CASE
WHEN (SELECT COUNT(*) FROM [dbo].[N_Seguimiento_Preinsc] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID])) = '0'
THEN '<span class="textoRojoSm"><i class="fa fa-ban fa-fw"></i> N/A</span>'
ELSE '<span class="textoVerdeSm"><i class="fa fa-check fa-fw"></i>('
+
CONVERT
(varchar(200),
(
SELECT COUNT(*) FROM [dbo].[N_Seguimiento_Preinsc] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID])
)
)
+ ')</span>'
+ ' <div class="tooltip">' + (SELECT TOP(1) [dbo].[N_Insc_EstadosSeguimiento].[Codigo] FROM [dbo].[N_Seguimiento_Preinsc] INNER JOIN [dbo].[N_Insc_EstadosSeguimiento] ON [dbo].[N_Insc_EstadosSeguimiento].[ID] = [dbo].[N_Seguimiento_Preinsc].[Codigo] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID]) ORDER BY [dbo].[N_Seguimiento_Preinsc].[ID] DESC) + '<span class="tooltiptext">' + (SELECT TOP(1) [dbo].[N_Seguimiento_Preinsc].[Comentario] + CONVERT(varchar(50), [dbo].[N_Seguimiento_Preinsc].[FechaEnv]) FROM [dbo].[N_Seguimiento_Preinsc] INNER JOIN [dbo].[N_Insc_EstadosSeguimiento] ON [dbo].[N_Insc_EstadosSeguimiento].[ID] = [dbo].[N_Seguimiento_Preinsc].[Codigo] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID]) ORDER BY [dbo].[N_Seguimiento_Preinsc].[ID] DESC) + '</span></div>'
END AS [Seguimiento]
FROM [dbo].[N_Preinscripcion]
INNER JOIN
[dbo].[N_Programas_Master]
ON [dbo].[N_Programas_Master].[ID] = [dbo].[N_Preinscripcion].[IdPrograma]
INNER JOIN
[dbo].[N_Programas_Tipos]
ON [dbo].[N_Programas_Tipos].[ID] = [dbo].[N_Programas_Master].[Tipo]
INNER JOIN
[dbo].[EstadosAdmision]
ON [dbo].[N_Preinscripcion].[Estado] = [dbo].[EstadosAdmision].[ID]
INNER JOIN
[dbo].[N_Sedes]
ON [dbo].[N_Sedes].[ID] = [dbo].[N_Preinscripcion].[Sede]
WHERE
([dbo].[N_Preinscripcion].[Periodo] = @p)
AND
([dbo].[N_Preinscripcion].[Sede] = @f1)
AND
((SELECT COUNT(*) FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])) = 0)
ORDER BY
[dbo].[N_Preinscripcion].[ID] DESC,
[dbo].[N_Preinscripcion].[Apellido] ASC,
[dbo].[N_Preinscripcion].[Nombre] ASC
)
END;
这两个查询的列结构均相同,但根据WHERE子句中的最后一条语句将呈现不同的数据。
因此,如果参数@ f3 = 1,则该语句将为:
Msg 1033, Level 15, State 1, Line 84
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.
Msg 156, Level 15, State 1, Line 156
Incorrect syntax near the keyword 'ORDER'.
如果@ f3 = 2,则该语句将为:
((SELECT COUNT(*) FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])) > 0)
谢谢!
答案 0 :(得分:2)
该错误的原因是,您在一列中select
多列。
您可以尝试用IF
代替CASE WHEN
IF (@f3 = 1)
BEGIN
SELECT
[dbo].[N_Preinscripcion].[ID],
[dbo].[N_Sedes].[Sede] AS [SedePrint],
[dbo].[N_Preinscripcion].[Nombre] + ' ' + [dbo].[N_Preinscripcion].[Apellido] AS [NombrePrint],
CASE
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '1' THEN 'TI-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '2' THEN 'CC-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '3' THEN 'CE-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '4' THEN 'PP-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '5' THEN 'OT-' + [dbo].[N_Preinscripcion].[DocIdentidad]
END AS [TipoDocIdentidadPrint],
[dbo].[N_Programas_Master].[Nombre] AS [Programa],
SUBSTRING([dbo].[N_Programas_Master].[Nombre], 0, CHARINDEX('-', [dbo].[N_Programas_Master].[Nombre])) AS [ProgramaPln],
[dbo].[N_Programas_Tipos].[Tipo],
[dbo].[N_Preinscripcion].[CodigoTemporal],
CASE
WHEN
(
SELECT COUNT(*) FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])
) = 0
THEN '<article style="color: rgb(237,27,47)"><i class="fa fa-ban" aria-hidden="true"></i> Sin activar</article>'
ELSE '<article style="color: rgb(121,162,68)"><i class="fa fa-user" aria-hidden="true"></i> Activada</article>'
END AS [EstadoCuenta],
CASE
WHEN [dbo].[N_Preinscripcion].[Revisado1] = 'False' THEN '<article style="color: rgb(121,162,68)"><i class="fa fa-folder-open-o" aria-hidden="true"></i> Nuevo</article>'
WHEN [dbo].[N_Preinscripcion].[Revisado1] = 'True' THEN '<article style="color: rgb(15,134,137)"><i class="fa fa-folder-open" aria-hidden="true"></i> Revisado</article>'
END AS [Revisado1Print],
[dbo].[EstadosAdmision].[Icono] + ' ' + [dbo].[EstadosAdmision].[Estado] AS [EstadoAdm],
CONVERT(varchar(200), [dbo].[N_Preinscripcion].[FechaEnv], 106) AS [Fecha],
'<a href="inscripciones-detalles.aspx?sklid=' + CONVERT(varchar(max), [dbo].[N_Preinscripcion].[ID]) + '">Detalles</a>' AS [AClink],
CASE
WHEN (SELECT COUNT(*) FROM [dbo].[N_Seguimiento_Preinsc] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID])) = '0'
THEN '<span class="textoRojoSm"><i class="fa fa-ban fa-fw"></i> N/A</span>'
ELSE '<span class="textoVerdeSm"><i class="fa fa-check fa-fw"></i>('
+
CONVERT
(varchar(200),
(
SELECT COUNT(*) FROM [dbo].[N_Seguimiento_Preinsc] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID])
)
)
+ ')</span>'
+ ' <div class="tooltip">' + (SELECT TOP(1) [dbo].[N_Insc_EstadosSeguimiento].[Codigo] FROM [dbo].[N_Seguimiento_Preinsc] INNER JOIN [dbo].[N_Insc_EstadosSeguimiento] ON [dbo].[N_Insc_EstadosSeguimiento].[ID] = [dbo].[N_Seguimiento_Preinsc].[Codigo] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID]) ORDER BY [dbo].[N_Seguimiento_Preinsc].[ID] DESC) + '<span class="tooltiptext">' + (SELECT TOP(1) [dbo].[N_Seguimiento_Preinsc].[Comentario] + CONVERT(varchar(50), [dbo].[N_Seguimiento_Preinsc].[FechaEnv]) FROM [dbo].[N_Seguimiento_Preinsc] INNER JOIN [dbo].[N_Insc_EstadosSeguimiento] ON [dbo].[N_Insc_EstadosSeguimiento].[ID] = [dbo].[N_Seguimiento_Preinsc].[Codigo] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID]) ORDER BY [dbo].[N_Seguimiento_Preinsc].[ID] DESC) + '</span></div>'
END AS [Seguimiento]
FROM [dbo].[N_Preinscripcion]
INNER JOIN
[dbo].[N_Programas_Master]
ON [dbo].[N_Programas_Master].[ID] = [dbo].[N_Preinscripcion].[IdPrograma]
INNER JOIN
[dbo].[N_Programas_Tipos]
ON [dbo].[N_Programas_Tipos].[ID] = [dbo].[N_Programas_Master].[Tipo]
INNER JOIN
[dbo].[EstadosAdmision]
ON [dbo].[N_Preinscripcion].[Estado] = [dbo].[EstadosAdmision].[ID]
INNER JOIN
[dbo].[N_Sedes]
ON [dbo].[N_Sedes].[ID] = [dbo].[N_Preinscripcion].[Sede]
WHERE
([dbo].[N_Preinscripcion].[Periodo] = @p)
AND
([dbo].[N_Preinscripcion].[Sede] = @f1)
AND
((SELECT COUNT(*) FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])) > 0)
ORDER BY
[dbo].[N_Preinscripcion].[ID] DESC,
[dbo].[N_Preinscripcion].[Apellido] ASC,
[dbo].[N_Preinscripcion].[Nombre] ASC
END
ELSE
BEGIN
SELECT
[dbo].[N_Preinscripcion].[ID],
[dbo].[N_Sedes].[Sede] AS [SedePrint],
[dbo].[N_Preinscripcion].[Nombre] + ' ' + [dbo].[N_Preinscripcion].[Apellido] AS [NombrePrint],
CASE
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '1' THEN 'TI-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '2' THEN 'CC-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '3' THEN 'CE-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '4' THEN 'PP-' + [dbo].[N_Preinscripcion].[DocIdentidad]
WHEN [dbo].[N_Preinscripcion].[TipoDocIdentidad] = '5' THEN 'OT-' + [dbo].[N_Preinscripcion].[DocIdentidad]
END AS [TipoDocIdentidadPrint],
[dbo].[N_Programas_Master].[Nombre] AS [Programa],
SUBSTRING([dbo].[N_Programas_Master].[Nombre], 0, CHARINDEX('-', [dbo].[N_Programas_Master].[Nombre])) AS [ProgramaPln],
[dbo].[N_Programas_Tipos].[Tipo],
[dbo].[N_Preinscripcion].[CodigoTemporal],
CASE
WHEN
(
SELECT COUNT(*) FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])
) = 0
THEN '<article style="color: rgb(237,27,47)"><i class="fa fa-ban" aria-hidden="true"></i> Sin activar</article>'
ELSE '<article style="color: rgb(121,162,68)"><i class="fa fa-user" aria-hidden="true"></i> Activada</article>'
END AS [EstadoCuenta],
CASE
WHEN [dbo].[N_Preinscripcion].[Revisado1] = 'False' THEN '<article style="color: rgb(121,162,68)"><i class="fa fa-folder-open-o" aria-hidden="true"></i> Nuevo</article>'
WHEN [dbo].[N_Preinscripcion].[Revisado1] = 'True' THEN '<article style="color: rgb(15,134,137)"><i class="fa fa-folder-open" aria-hidden="true"></i> Revisado</article>'
END AS [Revisado1Print],
[dbo].[EstadosAdmision].[Icono] + ' ' + [dbo].[EstadosAdmision].[Estado] AS [EstadoAdm],
CONVERT(varchar(200), [dbo].[N_Preinscripcion].[FechaEnv], 106) AS [Fecha],
'<a href="inscripciones-detalles.aspx?sklid=' + CONVERT(varchar(max), [dbo].[N_Preinscripcion].[ID]) + '">Detalles</a>' AS [AClink],
CASE
WHEN (SELECT COUNT(*) FROM [dbo].[N_Seguimiento_Preinsc] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID])) = '0'
THEN '<span class="textoRojoSm"><i class="fa fa-ban fa-fw"></i> N/A</span>'
ELSE '<span class="textoVerdeSm"><i class="fa fa-check fa-fw"></i>('
+
CONVERT
(varchar(200),
(
SELECT COUNT(*) FROM [dbo].[N_Seguimiento_Preinsc] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID])
)
)
+ ')</span>'
+ ' <div class="tooltip">' + (SELECT TOP(1) [dbo].[N_Insc_EstadosSeguimiento].[Codigo] FROM [dbo].[N_Seguimiento_Preinsc] INNER JOIN [dbo].[N_Insc_EstadosSeguimiento] ON [dbo].[N_Insc_EstadosSeguimiento].[ID] = [dbo].[N_Seguimiento_Preinsc].[Codigo] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID]) ORDER BY [dbo].[N_Seguimiento_Preinsc].[ID] DESC) + '<span class="tooltiptext">' + (SELECT TOP(1) [dbo].[N_Seguimiento_Preinsc].[Comentario] + CONVERT(varchar(50), [dbo].[N_Seguimiento_Preinsc].[FechaEnv]) FROM [dbo].[N_Seguimiento_Preinsc] INNER JOIN [dbo].[N_Insc_EstadosSeguimiento] ON [dbo].[N_Insc_EstadosSeguimiento].[ID] = [dbo].[N_Seguimiento_Preinsc].[Codigo] WHERE([dbo].[N_Seguimiento_Preinsc].[IdPre] = [dbo].[N_Preinscripcion].[ID]) ORDER BY [dbo].[N_Seguimiento_Preinsc].[ID] DESC) + '</span></div>'
END AS [Seguimiento]
FROM [dbo].[N_Preinscripcion]
INNER JOIN
[dbo].[N_Programas_Master]
ON [dbo].[N_Programas_Master].[ID] = [dbo].[N_Preinscripcion].[IdPrograma]
INNER JOIN
[dbo].[N_Programas_Tipos]
ON [dbo].[N_Programas_Tipos].[ID] = [dbo].[N_Programas_Master].[Tipo]
INNER JOIN
[dbo].[EstadosAdmision]
ON [dbo].[N_Preinscripcion].[Estado] = [dbo].[EstadosAdmision].[ID]
INNER JOIN
[dbo].[N_Sedes]
ON [dbo].[N_Sedes].[ID] = [dbo].[N_Preinscripcion].[Sede]
WHERE
([dbo].[N_Preinscripcion].[Periodo] = @p)
AND
([dbo].[N_Preinscripcion].[Sede] = @f1)
AND
((SELECT COUNT(*) FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])) = 0)
ORDER BY
[dbo].[N_Preinscripcion].[ID] DESC,
[dbo].[N_Preinscripcion].[Apellido] ASC,
[dbo].[N_Preinscripcion].[Nombre] ASC
END
答案 1 :(得分:2)
如果只有一个where
条件不同,那么您将使用if-else
条件编写冗余代码,因为查询几乎相同。将来将很难维护并且容易出现错误。您应该考虑删除if-else
条件,并通过单个查询处理where
子句中的@ f3条件。更新后的where
子句的最后一条语句如下所示。
删除此语句-
((SELECT COUNT(*) FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])) = 0)
并用以下条件替换
(@f3=1 and exists (SELECT 1 FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])
OR
(@f3=0 and not exists (SELECT 1 FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])
您的最终Where子句如下所示-
WHERE
([dbo].[N_Preinscripcion].[Periodo] = @p)
AND
([dbo].[N_Preinscripcion].[Sede] = @f1)
AND
( (@f3=1 and exists (SELECT 1 FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])
OR
(@f3=0 and not exists (SELECT 1 FROM [dbo].[aspnet_Users] WHERE([dbo].[aspnet_Users].[UserName] = [dbo].[N_Preinscripcion].[DocIdentidad])
)