Правильно, если ELSE использовать для конкретной ситуации - PullRequest
0 голосов
/ 08 мая 2019

Мне нужно перевести две разные, но связанные формулы Excel в SQL, чтобы сгенерировать необходимую информацию в отчете.

отчет для справки

1) СтолбецI вычисляет разницу между столбцом C и столбцом D, если в столбце D нет значения, вычисляется разница между столбцом C и столбцом H.

2) Столбец J вычисляет общее время, прошедшее между столбцомC и столбец H или общее время между столбцом C и столбцом H минус столбец D и столбец E.

Первая формула в столбце I -

=TEXT(IF(D3<>"",D3-C3,H3-C3),"H:MM:SS")

Вторая формула встолбец J -

=TEXT((H3-C3)-(E3-D3), "H:MM:SS")

Это то, что я пробовал после просмотра этого видео , у меня практически нет знаний по SQL ... (sub COLUMND / C / H для фактических имен заголовков.) -

IF COLUMND > 0
    BEGIN
        COLUMND – COLUMNC
    END
ELSE
    BEGIN
        COLUMNH – COLUMNC
    END

Я ожидаю, что правильные значения будут вычислены с использованием SQL, и не нужно будет экспортировать отчет и ввести формулу Excel.

Ответы [ 3 ]

1 голос
/ 08 мая 2019

Вы хотите использовать регистр, вот как вы можете вычислить Col I:

SELECT CASE WHEN StartMeal is not null THEN StartMeal - StartShift
ELSE EndShift - StartShift END AS Difference
0 голосов
/ 09 мая 2019

Пример SQL Fiddle: http://sqlfiddle.com/#!18/3da8b/10

SQL-запрос:

SELECT CONVERT(VARCHAR, 
               CASE
                 WHEN Startmeal is Null THEN EndShift - StartShift
                 ELSE StartMeal - StartShift
               END,
               8) AS DifferenceBetweenStartAndLunchOrEndTime
FROM MyTest;
0 голосов
/ 09 мая 2019

Для начала, вы должны поделиться определениями таблиц, потому что тип данных будет влиять на то, как данные должны обрабатываться. Вот пример того, как получить то, что вы просите. Первая часть о том, как вы должны опубликовать пример данных для запроса.

CREATE TABLE #SampleData(
    EmployeeName    varchar(100),
    ShiftDate       date,
    StartShift      datetime,
    StartMeal       datetime,
    EndMeal         datetime,
    EndShift        datetime)
INSERT INTO #SampleData
VALUES( 'TEST, TEST A', '20190424', '20190424 18:48', NULL, NULL, '20190425 03:04'),
      ( 'TEST, TEST B', '20190425', '20190425 07:00', '20190425 12:59', '20190425 13:57', '20190425 16:03')

SELECT * ,
    CONVERT( time, DATEADD( mi, ISNULL( DATEDIFF(mi, StartShift, StartMeal), DATEDIFF(mi, StartShift, EndShift)), 0)),
    CONVERT( time, DATEADD( mi, DATEDIFF(mi, StartShift, EndShift)- ISNULL(DATEDIFF(mi, StartMeal, EndMeal), 0), 0))
FROM #SampleData
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...