我正在研究新代码,该代码应:作为程序的共同点进行报告:(因此,将其读为“ MAKE PROCEDURE WHICH display”:)
过程在开始OD
,DO
,IMEI
时有3个输入参数当您免费(空)时,应显示100个最新的作业记录
对我来说一切都很好,但是我的主管希望我不要使用IF ELSE
来优化它,他建议我使用WHERE作为更好的选择。
ALTER PROCEDURE raport @OD DATE, @DO DATE, @IMEI nvarchar(200)
AS
BEGIN
IF ISNULL(@IMEI, '') <> '' AND ISNULL(@OD,'') <>'' AND ISNULL(@DO,'') <>''
BEGIN
SELECT top 1
Z.ID,
Z.JobNo,
Z.IMEI,
CAST(Z.DateBooked AS DATE) AS DataRejestracji,
Akcesoria = STUFF(
(
SELECT ',' + A.Accessory
FROM dbo.SPLIT(Z.Accessories, '/') new
INNER JOIN dbo.Accessories A ON new.items = A.Skrot COLLATE DATABASE_DEFAULT
FOR XML PATH (''), TYPE
).value('.', 'varchar(max)'), 1, 1, ''
) ,
--JA.ID_Jobs,
JA.ID as ID_JobsArch,
FLSymptomsCodes = STUFF
(
(
SELECT ',' + FS.FLSymptomCode
FROM JobsSpares JS
INNER JOIN FLSymptomCodes FS ON JS.ID_FLSymptomCodes = FS.ID
WHERE js.id_jobs=Z.ID
FOR XML PATH (''), TYPE
).value('.', 'varchar(max)')
, 1, 1, ''),
@@servername AS [Nazwa Hosta],
CASE WHEN Z.RepairDate IS NULL THEN 'NIE'
ELSE 'TAK'
END AS Naprawiony
FROM ZTEPro.dbo.Jobs AS Z
INNER JOIN dbo.JobsArch JA
ON Z.ID=JA.ID_Jobs
WHERE
Z.IMEI = @IMEI AND
Z.DateBooked BETWEEN @OD AND @DO
ORDER BY Id_JobsArch DESC
END
ELSE
BEGIN
SELECT top 100
Z.ID,
Z.JobNo,
Z.IMEI,
CAST(Z.DateBooked AS DATE) AS DataRejestracji,
Akcesoria = STUFF(
(
SELECT ',' + A.Accessory
FROM dbo.SPLIT(Z.Accessories, '/') new
INNER JOIN dbo.Accessories A ON new.items = A.Skrot COLLATE DATABASE_DEFAULT
FOR XML PATH (''), TYPE
).value('.', 'varchar(max)'), 1, 1, ''
) ,
--JA.ID_Jobs,
JA.ID as ID_JobsArch,
JA.ActData,
FLSymptomsCodes = STUFF
(
(
SELECT ',' + FS.FLSymptomCode
FROM JobsSpares JS
INNER JOIN FLSymptomCodes FS ON JS.ID_FLSymptomCodes = FS.ID
WHERE js.id_jobs=Z.ID
FOR XML PATH (''), TYPE
).value('.', 'varchar(max)')
, 1, 1, ''),
@@servername AS [Nazwa Hosta],
CASE WHEN Z.RepairDate IS NULL THEN 'NIE'
ELSE 'TAK'
END AS Naprawiony
FROM ZTEPro.dbo.Jobs AS Z
INNER JOIN dbo.JobsArch JA
ON Z.ID=JA.ID_Jobs
ORDER BY JA.ActData DESC
END
END;
也许WHERE
子句...但是我没主意。也不知道我应该在这里再说些什么细节。
您可以实现这样的条件TOP
子句(无需使用ISNULL
函数:]