Я работаю над своим новым кодом, который должен: Сделать отчет как процедуру, содержащую полюс: (поэтому прочитайте его как СДЕЛАТЬ ПРОЦЕДУРУ, КОТОРЫЙ отображает:)
- Id
- JobNo
- IMEI
- DataRejestracji (дата регистрации fe) в формате specyfi c - в таблице его diffr enet
- Akcesoria (полные имена аксессуаров, использующих один за другим используя "," из Jobs.Accessories и используйте функцию SPLIT
- Id_JobsArch ((Jobs.ID = JobsArch.ID_Jobs и должна отображаться только одна новейшая запись даты)
- Направионы (если полюс Джобса. RepairDate пуст, тогда Нет, если еще ДА)
- FLSymptomCodes (JobsSpares.ID_JOBS = Jobs.ID> JobsSpares.ID_FLSymptomCodes = FLSymptomCodes.ID, один за другим, используя ";"
- NazwaHosta (имя хоста)
Процедура имеет 3 входных параметра при запуске OD
, DO
, IMEI
КОГДА ВЫ ПОЛУЧАЕТЕ ИХ БЕСПЛАТНО (пусто), должно отображаться 100 новейших записей задания
Сделано у меня все работает нормально, однако мой руководитель хочет, чтобы я Измените его, не используя IF ELSE
, и он предлагает мне использовать ГДЕ как лучший вариант.
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
предложения ... но у меня нет идей. Также не знаю, какие подробности мне следует здесь разместить.